2013-05-20 69 views
2

我正在使用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来解决跨域问题。

任何想法?谢谢!

回答

1

你必须明确format参数传递给网址:

&format=json 

否则,它只是漂亮,打印输出:

<html><body><pre>{ 
    "meta": { 
     "code": 401, 
     "message": "Key not recognized", 
     "name": "AuthenticationFailed" 
    }, 
    "response": {} 
}</pre></body></html> 

另外,我想设置asynctrue

+0

解决了!谢谢一堆。是的,我会将异步设置为true。这个问题让我疯狂,所以再次感谢! – user2403423

+0

只是澄清,添加'&format = json'到URL解决了我的问题。将'contentType'设置为'application/json'不起作用。 – user2403423

+0

@ user2403423:好吧,至少有一个工作。 – Blender