我的网页内容和javascript太多了。当页面加载时,它会使用Ajax和XMLHttp来加载数据。有没有办法挂钩所有这些请求并将它们指向不同的服务器。
例如,网页在加载后从 www.apple.com/data 和 www.mango.com/data 中提取数据。是否可以在网页的某处插入脚本,自动更改对 www.orange.com/data 的任何请求。
等待回答。感谢
答案 0 :(得分:1)
您可以向ajaxSend事件添加全局处理程序,该事件将在发送ajax请求之前触发。因此,您可以检查请求uri,应用一些过滤逻辑,然后通过中止原始重定向请求重定向并重新发送它。 以下是一个例子
$(document).ajaxSend(function(e, xhr, opt) {
if (opt.url.indexOf("www.apple.com") !== -1) {
// abort the request
xhr.abort();
// change the uri to www.orange.com
opt.url = opt.url.replace("www.apple.com", "www.orange.com");
$.ajax(opt);
}
});
答案 1 :(得分:0)
确定。所以我跟着Anthony C的回答,确实有效。但他的解决方案的问题在于它只适用于Ajax请求而不是XMLHttpRequests(我不知道为什么,我是这个主题的初学者。)然而,挖掘他创建一个钩子的想法我在这里遇到了类似的帖子{{ 3}}。该代码提供了一种获取每个请求的请求URL的方法。因此,通过对代码的一些调整,我设法得出了这个: -
XMLHttpRequest.prototype.open = (function(open) {
return function(method,url,async) {
var uri=getLocation(url);// use get location function to convert requested url string into readable url
if(uri.hostname!="orange.com"){
url="https://orange.com" + url;
}
open.apply(this,arguments);
};
})(XMLHttpRequest.prototype.open);
var getLocation = function(href) {
var l = document.createElement("a");
l.href = href;
return l;
};
此页面顶部的代码允许我更改未定向到orange.com的所有XMLHttpRequests的主机名。虽然我确信有更好的方法来编写这段代码,但由于我不是javascript的专家,这足以满足我对时间的需求。