你dataType
应该是jsonp
,而不是'json'。
更新
根据http://www.wordreference.com/docs/api.aspx:
此外,对于 JSPONp,JSON API 可以在查询字符串中采用可选的回调函数;只需将“?callback={yourCallback}”添加到 URL 的末尾。
所以 API 确实支持 JSONP。
此外,JSONP 表示“带有填充的 JSON”,因此您将收到 JSON 响应。JSONP 仅允许使用CORS。
通过将您更改dataType
为jsonp
:
“jsonp”:使用 JSONP 加载到 JSON 块中。添加一个额外的“?callback =?” 到 URL 的末尾以指定回调。通过将查询字符串参数“_=[TIMESTAMP]”附加到 URL 来禁用缓存,除非缓存选项设置为 true。
您可以通过使用设置指定一个来覆盖默认回调jsonpCallback
。
最后,您还应该添加一个错误处理程序并设置async
为true
:
jQuery.ajax({
"async": true, //cannot be false for JSONP
"url": "http://api.wordreference.com/0.8/key/json/roen/" + word,
"dataType": 'jsonp',
"method": "GET",
"error": function (jqXHR, textStatus, errorThrown) {
//included so you can see any errors
console.log(textStatus + ': ' + errorThrown);
},
"success": function (data, textStatus, jqXHR) {
//According to API documentation
//data will not likely contain either Error, or Response
//so, exists will likely not change to 0
if (data.Error || data.Response) {
exists = 0;
}
}
});
更新:
错误和“需要同步”的解决方案将是Pointy之前指出的。您必须创建一个与您的脚本在同一域上运行的服务器端代理。
服务器端代理可以返回 JSONP,但坦率地说,简单地返回 JSON 或 XML 更简单,因为CORS不是问题,并且代理可以是同步的。对于 PHP 示例脚本,Yahoo! Developer Network托管一个简单代理的源代码。
对于有关服务器端 Web 服务代理的任何其他内容,您需要指定您正在使用的服务器语言(它可能更适合作为不同的问题)。