Callback not getting called on Internet Explorer for Ajax JSONP call

喜你入骨 提交于 2019-12-13 15:54:32

问题


I'm making an Ajax call using JSONP to fetch JSON data from a third-party (domain different from my site) and its working on Chrome and Firefox but failing on IE (9 & 10 are the versions I have tried). In the IE debugger I see the call is completing (with Http 200) but the callback I've specified for the JSONP call is not being invoked.

My code looks like this:

$.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;
    }
});

And the response body looks like this:

<html><body><pre>processResult({
... [valid JSON data]
});</pre></body></html>

When the call is made, the error function is getting invoked with error as: Error: processResult was not called and the IE debugger shows a script error caused when trying to parse the <html><body><pre> tags in the response. When running on Chrome and Firefox these html tags don't exist in the response body and I'm not sure why the response is different in the case of IE.

It appears that these tags are causing IE to barf and not be able to invoke the callback. I've tried specifying other values for contentType such as "text/html", "text", "application/javascript" and even not specifying it at all, but its not made any difference. I'm using JSONP to get around the cross-domain issue.

Any ideas? Thanks!


回答1:


You have to pass an explicit format argument to the URL:

&format=json

Otherwise, it's just pretty-printing the output:

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

Also, I would set async back to true.



来源:https://stackoverflow.com/questions/16659807/callback-not-getting-called-on-internet-explorer-for-ajax-jsonp-call

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!