Javascript 跨域ajax请求自动使用jsonp
我如何告诉jQuery在跨域ajax请求中自动使用“jsonp”,而在相同的域请求中继续使用“json”?我想用javascript编写一个客户端库,它只在必要时使用jsonp。让我们以这个小片段为例:Javascript 跨域ajax请求自动使用jsonp,javascript,jquery,Javascript,Jquery,我如何告诉jQuery在跨域ajax请求中自动使用“jsonp”,而在相同的域请求中继续使用“json”?我想用javascript编写一个客户端库,它只在必要时使用jsonp。让我们以这个小片段为例: jQuery.ajax(url, { dataType: "jsonp" }); 当数据类型为“jsonp”时,jquery总是使用jsonp,但已经自动检测它是否可以发送正常的Ajax请求(对于相同的域请求)或者是否必须使用javascript注入(对于跨域请求) 因此,jQuery
jQuery.ajax(url, {
dataType: "jsonp"
});
当数据类型为“jsonp”时,jquery总是使用jsonp,但已经自动检测它是否可以发送正常的Ajax请求(对于相同的域请求)或者是否必须使用javascript注入(对于跨域请求)
因此,jQuery似乎已经能够自动检测到这一点,并决定使用哪种技术。但是,当标准的Ajax请求是可能的时,没有必要使用jsonp,所以我只想对跨域请求使用“jsonp”。我该怎么做
或者可以询问jQuery url是否跨域?然后我可以自己检查,并使用不同的数据类型调用jQuery.ajax。您可以使用类似的方法,然后检查scheme/hostname是否匹配。解析url的一个简单方法是创建
元素,并让浏览器为您提供url部分
function sameOrigin(url){
var link = document.createElement("a");
link.href = url;
return ((link.protocol + link.host) === window.location.protocol + window.location.host);
}
var url = "http://stackoverflow.com/questions/6227584/jquery-automatic-usage-of-jsonp-for-cross-domain-ajax-requests";
if (sameOrigin(url)){
// use json
}else{
// use jsonp
}
如果您打算编写代码来处理JSONP,那么它有什么区别呢?通过jQuery,它或多或少是透明的;你的回调会被这样或那样调用。比如说,我喜欢只在必要时使用“hacks”。在所有主流浏览器都支持CORS之前,JSONP是一种必要的攻击。如果您打算在JavaScript库中使用标准方法,则需要进行一次轻微的攻击。您可以检查当前url和目标url。不理想,但相当简单。