我一直试图解决这个问题几个小时(在这里也搜索但没有一个解决方案有效)所以我别无选择,只希望有人告诉我为什么会这样,我该如何解决它。
这是一个简单的代码,适用于Firefox但不适用于IE9(没有其他版本)
示例代码在这里:
来源就是这个:
$.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中运行。
答案 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响应。
答案 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}); 。它对我有用!