getJSON或AJAX请求不使用IE9

时间:2011-06-29 00:11:32

标签: jquery ajax internet-explorer-9 getjson

我一直试图解决这个问题几个小时(在这里也搜索但没有一个解决方案有效)所以我别无选择,只希望有人告诉我为什么会这样,我该如何解决它。

这是一个简单的代码,适用于Firefox但不适用于IE9(没有其他版本)

示例代码在这里:

http://jsfiddle.net/z5b2J/

来源就是这个:

$.ajax({
  url: "http://query.yahooapis.com/v1/public/yql?q=select%20script%20from%20html%20where%20url%3D%27https%3A%2F%2Ftesting.website.com%2F%3Fcid%3D48hgfd45430DD%26id%3D4830F8CF0454312%27&format=json&diagnostics=true&_maxage=86400",
  success: function(){
   alert('hi');
  }
});

该网站不需要真实用于测试目的。

正如你在Firefox下的小提琴中看到的那样,一个警告框出现“hi”但是如果你在IE9中运行完全相同的代码,警报框就不会出现。

使用getJSON方法会出现同样的情况,这对我来说是一个问题,因为我想运行一些代码而不是警报,但它不会在IE9中运行。

5 个答案:

答案 0 :(得分:13)

您是否尝试使用getJSON()而不是ajax?这是一个跨域请求,你正在获取json,这可能是问题所在。

它现在在两种浏览器中都有效:

$.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20script%20from%20html%20where%20url%3D%27https%3A%2F%2Ftesting.website.com%2F%3Fcid%3D48hgfd45430DD%26id%3D4830F8CF0454312%27&format=json&diagnostics=true&_maxage=86400&callback=?",function(){
   alert('hi');
});

答案 1 :(得分:6)

IE9的问题取决于高级缓存管理。

如果你清空IE的缓存并重新运行ajax请求:第一次就可以了。

要解决此问题,您必须发送带有“noStore = true”和“Duration = 0”或等效的HTTP响应。

这是example in MVC

答案 2 :(得分:4)

使用$.getJSON$.ajax您还必须指定dataType参数'jsonp'

这里使用getJSON的示例:

var webpage = ".... your very long url ....";
var anchor = document.createElement('a');
anchor.href = webpage;
// handle the multiple parameters
anchor.search += ((anchor.search.length > 0) ? "&" : "?");
anchor.search += "callback=?";

$.getJSON(anchor.href, 'jsonp',  function(data, textStatus, jqXHR){
   alert('hi');
});

答案 3 :(得分:2)

我通过添加"持续时间= 0"解决了问题。与网址

答案 4 :(得分:2)

如果添加回调=?到URL,它将被转换为类似callback = jQuery1820719005049791166_1366033695001。它是函数的名称,在服务器端,您应该在此函数调用中包装json编码对象。所以你的回应主体应该不只是{ok:true},而是jQuery1820719005049791166_1366033695001({ok:true}); 。它对我有用!