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}); 。 它对我有用!