【问题标题】:'No Transport' Error w/ jQuery ajax call in IEIE 中带有 jQ​​uery ajax 调用的“无传输”错误
【发布时间】:2012-02-27 22:17:15
【问题描述】:

我需要使用foursquare API 来搜索场地。当然是跨域。

在 Firefox 中没有任何问题,但在 Internet Explorer 中(我测试过 7、8、9)。

我的 javascript 代码如下所示:

searchVenues: function(searchQuery) {
    $.ajax({
       url: 'https://api.foursquare.com/v2/venues/search',
       data: {
            sw: bound_south_west,
            ne: bound_north_east,
            query: searchQuery.query,
            oauth_token: FSQ_OAUTH_TOKEN,
            limit: 25,
            intent: 'browse',
            v: 20120206
       },
       cache: false,
       dataType: 'json',
       success: function(data) {
           displayResults(data, searchQuery.query);
       },
       error: function(xhr, status, errorThrown) {
           console.log(errorThrown+'\n'+status+'\n'+xhr.statusText);
       }
    });
}

在 Firefox 中,它完美地显示接收到的数据。 在 Internet Explorer 中,它登录控制台:

No Transport
Error
Error

我该怎么办?

【问题讨论】:

标签: ajax internet-explorer jquery cross-domain


【解决方案1】:

我在 Windows Mobile 7 上对此进行了测试。

花了很多时间理解之后,我终于找到了这个:

http://bugs.jquery.com/ticket/10660

解决方法很简单,设置如下:

$.support.cors = true;

Ajax 跨域请求也能正常工作!

【讨论】:

  • 我在 IE8 和 IE9 上也收到“错误:访问被拒绝”
  • 接受的答案并不能真正解决 IE8 或 IE9 上的问题,这有点令人沮丧。
  • 我也有类似的问题。适用于 IE10 但不适用于 IE8 或 IE9
  • 我还收到“错误:访问被拒绝”,我的错误是我从 HTTP 域中提取了 HTTPS 内容。确保您的网站和您的 ajax 目标使用相同的协议(HTTP 或 HTTPS)
  • 我相信这是默认设置的。对我来说,解决方案是 XDR 请求传输 - 请参阅这个流行的答案:stackoverflow.com/a/10232313/217866
【解决方案2】:
jQuery.support.cors = true;

$.ajax({
  crossDomain: true,
  url: "",
  type: "POST",
  dataType: "xml",
  data: soapMessage,
});

你需要将跨域值设为true

【讨论】:

  • 你的答案和接受的答案有什么区别?
  • @javanna 在 options 参数中添加了crossDomain: true
  • 什么是跨域,为什么需要是真的?
  • 如果我没记错的话,你不需要crossDomain: true 那是$.support.cors 默认做的
【解决方案3】:

这个问题困扰了我一段时间。作为一种解决方法,我使用位于同一站点上的代理脚本。此类脚本只是执行服务器到服务器的非 ajax HTTP 请求(想想 curl 和 WinHttp.WinHttpRequest)并将状态和数据传回给调用者。它可以工作,但显然效率不高,因为它必须执行两个 HTTP 请求。

就我而言,解决方案是上述所有内容加上“Access-Control-Allow-Origin”标头的组合。

$.support.cors = true; // this must precede $.ajax({}) configuration

$.ajax({
  crossDomain: true, // added in jQuery 1.5
  headers: {
    'Access-Control-Allow-Origin': '*'
  },
  ...
});

响应这些调用的 Web 服务也会响应“Access-Control-Allow-Origin: *”标头。

【讨论】:

  • ... 然而,这是第一个提到 CORS 标头的答案。接受的解决方案对我不起作用。
  • 我想这应该在服务的 web.config 中。
【解决方案4】:

试试这个解决方案:

https://stackoverflow.com/a/14463975/237091

或者,只需在包含 jquery 之后立即将此代码放入您的 HTML 中。

<!--[if lte IE 9]>
<script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js'></script>
<![endif]-->

【讨论】:

【解决方案5】:

我刚刚更改了 jquery 版本并替换了 CDN 链接,它工作了!如果crossDomain:true$.support.cors = true 不起作用,就这样做。

<script src="https://code.jquery.com/jquery-3.5.1.js" integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2010-10-09
    • 2013-10-20
    • 2016-03-06
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多