我正在使用JSONP从第三方(与我的网站不同的域)获取JSON数据,并在Chrome和Firefox上工作但在IE上失败(9& 10是我试过的版本) )。在IE调试器中,我看到调用正在完成(使用Http 200)但是我没有调用我为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进入barf并且无法调用回调。我已经尝试为contentType指定其他值,例如“text / html”,“text”,“application / javascript”,甚至根本没有指定它,但它没有任何区别。我正在使用JSONP解决跨域问题。
有什么想法吗?谢谢!
答案 0 :(得分:1)
您必须将明确的format
参数传递给URL:
&format=json
否则,它只是打印输出:
<html><body><pre>{
"meta": {
"code": 401,
"message": "Key not recognized",
"name": "AuthenticationFailed"
},
"response": {}
}</pre></body></html>
另外,我会将async
设置回true
。