【问题标题】:Automatic usage of jsonp for cross domain ajax requests跨域ajax请求自动使用jsonp
【发布时间】:2023-04-03 22:50:02
【问题描述】:

我如何告诉 jQuery 自动使用“jsonp”处理跨域 ajax 请求,而它继续使用“json”处理同域请求?我想用 javascript 编写一个客户端库,仅在必要时使用 jsonp。我们以这个小sn-p为例:

jQuery.ajax(url, {
    dataType: "jsonp"
});

当数据类型为“jsonp”时,jquery 总是使用 jsonp,但已经自动检测它是否可以发送正常的 Ajax 请求(对于同域请求)或者它是否必须使用 javascript 注入(对于跨域请求)。

所以 jQuery 似乎已经能够自动检测到这一点并决定使用哪种技术。但是当一个标准的 Ajax 请求是可能的时,没有必要使用 jsonp,所以我想只对跨域请求使用“jsonp”。我该怎么做?

或者也许可以询问 jQuery 一个 url 是否是跨域的?然后我可以自己检查并使用不同的数据类型调用 jQuery.ajax。

【问题讨论】:

  • 如果你要编写代码来处理 JSONP,它有什么区别?无论如何,通过 jQuery,它或多或少是透明的;你的回调会以一种或另一种方式被调用。
  • 假设我只在必要时才喜欢使用“hacks”。在所有主要浏览器都支持 CORS 之前,JSONP 是必不可少的。
  • 如果你打算在 JavaScript 库中使用标准方法,那将是一个小技巧。您可以检查当前 url 和目标 url。不理想但相当简单。

标签: javascript jquery


【解决方案1】:

您可以使用this 之类的内容,然后检查方案/主机名是否匹配。解析 url 的一种简单替代方法是创建一个 a 元素并让浏览器为您提供 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
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2013-10-29
    • 2013-11-09
    • 1970-01-01
    • 2013-06-19
    • 2013-03-11
    相关资源
    最近更新 更多