获取json意外令牌

时间:2014-07-22 10:04:59

标签: javascript jquery ajax json jsonp

我正在尝试使用JSONP获取JSON文件:

function getJson() {
    var url = 'http://www.oref.org.il/WarningMessages/alerts.json?callback=?';
    $.getJSON(url, function(data) {
        checkJson(data);
    });
    setTimeout(arguments.callee, 2000);
}
getJson();

问题是我收到了这个错误:

Uncaught SyntaxError: Unexpected token :

所以我在网上搜索了一些解决方案,但没有解决方案。

我尝试使用Ajax而我尝试将$.getJSON替换为$.parseJSON,但我收到了此错误:

Uncaught SyntaxError: Unexpected token h 

JSON文件:

{ "id" : "1406032249536", "title" : "test", "data" : [] }

1 个答案:

答案 0 :(得分:2)

因为您的网址中有callback=?,所以您正在发出JSONP请求。

JSONP请求的响应必须是JavaScript应用程序。它应该包含一个函数调用(由(在PHP术语中)$_GET['callback']定义的函数)和一个参数(您要求的数据)。

您正在获取JSON,因此您尝试连接的服务不支持JSONP(至少不支持标准callback参数 - 请参阅他们的文档可能会给您一个不同的参数使用)。 / p>


您可以制作标准的XMLHttpRequest(通过取消callback=?),但您(在评论中)说,这会让您抱怨Access-Control-Allow-Origin未授予您网站访问权限的权限。< / p>


如果您控制JSON端点,则可以对其进行更改,使其支持JSONP或CORS(提供Access-Control-Allow-Origin)。听起来你不能控制那个端点,所以这不是一个选择。


这为您提供了一个选项:使用代理。

向您自己的服务器发出Ajax请求。让服务器上运行的服务器端程序向JSON端点发出请求并返回数据。

您还可以考虑使用第三方代理,例如YQL,但这可能会受到您在该问题的另一条评论中提到的地理限制的影响。