'没有传输'错误w / jQuery ajax在IE中调用

时间:2012-02-06 12:29:09

标签: ajax internet-explorer jquery cross-domain

我需要使用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

我该怎么办?

5 个答案:

答案 0 :(得分:263)

我在Windows Mobile 7上测试了这个。

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

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

解决方案很简单,只需设置:

$.support.cors = true;

和Ajax跨域请求将起作用!

答案 1 :(得分:13)

jQuery.support.cors = true;

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

您需要将跨域值设为true

答案 2 :(得分:7)

这个问题一直困扰着我。作为一种解决方法,我使用位于同一站点上的代理脚本。这样的脚本只是执行服务器到服务器的非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:*”标题。

答案 3 :(得分:6)

试试这个解决方案:

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]-->

答案 4 :(得分:0)

我刚刚更改了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>