CORS 同步请求在 Firefox 中不起作用

Posted

技术标签:

【中文标题】CORS 同步请求在 Firefox 中不起作用【英文标题】:CORS synchronous requests not working in firefox 【发布时间】:2013-05-16 02:59:36 【问题描述】:

jQuery 的官方文档(async ajax section)说:

跨域请求和dataType:“jsonp”请求不支持 同步操作。

但是,这适用于所有最近的浏览器,但 firefox 版本 >= 20。这是我正在进行的调用类型:

$.ajax(
      type : "GET",
      async: false,
      dataType : "text",
      url : link,
      xhrFields:  withCredentials: true ,

      success: function(response)
         console.log("success ");
      ,
        error: function(error)
            console.error(error);               
          
);

有人知道为什么会这样吗?

更新: 我用 jQuery 和 vanilla XHR 测试过,错误总是一样的

[Exception...“参数或操作不受 底层对象”代码:“15” nsresult:“0x8053000f (InvalidAccessError)"

【问题讨论】:

你没有使用 dataType: "jsonp",所以它一定是跨域的部分,但是你没有告诉我们这个请求是从哪里/到哪里发出的。 FF 中发生了什么?网络检查员会告诉你什么? @tandrewnichols 我正在使用 CORS 来发出跨域请求。 @Bergi 在网络检查器选项卡中没有显示任何请求。 我在使用 CORS 时需要同步请求,如果我删除 async:false 请求成功。 【参考方案1】:

使用beforeSend 代替xhrField

$.ajax(
    type : "GET",
    async: false,
    dataType : "text",
    url : link,
    beforeSend: function(xhr) 
      xhr.withCredentials = true;
    ,
    success: function(response)
      console.log("success ");
    ,
    error: function(error)
      console.error(error);               
    
);

【讨论】:

以上是关于CORS 同步请求在 Firefox 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 NancyFX 获取在 CORS 中不起作用的请求

预检 CORS 请求在 Chrome 60 中不起作用

跨域 Ajax 请求在 Opera 和 IE9 中不起作用?

对 API 网关的 CORS 请求在浏览器中不起作用

Firefox 3 CORS XMLHTTPRequest 似乎不起作用

ajax 跨源请求在 safari 中不起作用,但在 chrome 和 firefox 中起作用