getJSON或AJAX请求不使用IE9

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

这是一个简单的代码,适用于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中运行。

你尝试使用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'); }); 

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

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

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

这是MVC中的一个例子 。

使用$.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'); }); 

我通过添加“持续时间= 0”来解决问题

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