我正在尝试使用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" : []
}
答案 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,但这可能会受到您在该问题的另一条评论中提到的地理限制的影响。