jQuery.ajax()在从x-domain源获取JSON时获取parseError

时间:2011-08-08 20:30:46

标签: javascript jquery ajax xmlhttprequest cross-domain

这是我的Javascript

$.ajax({
    "url": url,
    "dataType" : "json",
    "async" : false,
    "success" : function(e) {
        retval = e;
    },
    "complete" : function(jqXHR, textStatus) {
        debugger;
    },
    "error" : function(jqXHR, textStatus, errorThrown) {
        debugger;
    },
    "xhrFields": {
       withCredentials: true
    }
})

url例如http://api.justin.tv/api/channel/show/{0}.json{0}被频道名称替换)

脚本在textStatus“parseserror”时出错。另外我注意到jqXHR没有responseText,而是我尝试加载的所有json文件都出现在Uncaught SyntaxError: Unexpected token :的资源选项卡中。此外,我收到每个ajax请求的警告Resource interpreted as Script but transferred with MIME type application/json.。此外,x-domain请求似乎不是异步的,因为ajax调用之下的代码在error回调执行之前执行。

所以为了澄清,我的目标是让ajax调用成功回调在每个请求上运行,解析的JSON对象为e。此代码已经适用于本地json ajax调用,而不适用于x-domain调用。 x-domain调用返回的json是有效的,不应导致parsererrors。

如果有任何想法,请分享

由于

2 个答案:

答案 0 :(得分:1)

尝试将?jsonp =添加到您网址的末尾。您通常需要指定一个回调来获取正确的JSONP

> http://api.justin.tv/api/channel/show/{0}.json?jsonp=

查看这两个网址之间的区别

http://api.justin.tv/api/channel/show/342.json?jsonp=

http://api.justin.tv/api/channel/show/342.json

?jsonp =在数据周围添加parens,以便您可以跨域使用它。

答案 1 :(得分:0)

您需要在jsonp - http://api.jquery.com/jQuery.ajax/

中查看$.ajax()支持

您违反了same origin policy,您无法在您的域外制作XmlHttpRequests。 JSONP允许你解决这个问题。

我不知道justin.tv是否支持JSONP;基本上,它需要将它发送给你的响应包装在JSONP调用提供的方法中。