我正在使用JSONP从第三方(与我的网站不同)获取JSON数据的Ajax调用及其在Chrome和Firefox上的工作,但在IE上失败(9 & 10是我试过的版本)。在IE调试器中,我看到调用正在完成(使用Http 200),但是我为JSONP调用指定的回调没有被调用。回调没有得到在Internet Explorer上调用Ajax JSONP调用
我的代码如下所示:
$.ajax({
url: 'http://api.yipit.com/v1/deals/?key=mykey&division=seattle&limit=1000',
dataType: 'jsonp',
contentType: "text/javascript",
async: false,
cache: false,
crossDomain: true,
jsonp: 'callback',
jsonpCallback: 'processResult',
error: function (xhr, textStatus, error) {
window.alert(error);
},
success: function (data) {
window.alert(JSON.stringify(data));
_yipit_deals = data.response.deals;
}
});
和响应身体看起来是这样的:
<html><body><pre>processResult({
... [valid JSON data]
});</pre></body></html>
当调用时,误差函数得到调用,错误为:Error: processResult was not called
和IE调试器显示尝试解析响应中的<html><body><pre>
标记时导致的脚本错误。在Chrome和Firefox上运行时,这些HTML标记不存在存在于响应正文中,我不确定为什么响应在IE的情况下不同。
看来,这些标签导致IE浏览器无法调用回调。我试过为contentType指定其他值,比如“text/html”,“text”,“application/javascript”,甚至根本没有指定它,但它没有任何区别。我正在使用JSONP来解决跨域问题。
任何想法?谢谢!
解决了!谢谢一堆。是的,我会将异步设置为true。这个问题让我疯狂,所以再次感谢! – user2403423
只是澄清,添加'&format = json'到URL解决了我的问题。将'contentType'设置为'application/json'不起作用。 – user2403423
@ user2403423:好吧,至少有一个工作。 – Blender