我正在尝试从 Geobytes 获取数据。其中一个模板返回 JSON,我需要跨域访问它。
我写了这两个函数
function getCountry(ip) {
var surl = "http://www.geobytes.com/IpLocator.htm?GetLocation&template=json.txt";
$.ajax({
url: surl,
data: '{"ipaddress":"' + ip + '"}',
dataType: "jsonp",
processData: false,
jsonpCallback: "jsonpcallback",
error: function (xhr, status, error) {
alert(xhr.responseText);
}
});
}
function jsonpcallback(rtndata) {
alert(rtndata.message);
}
调用成功执行,这些是我的响应标头:
HTTP/1.1 200 OK
Date: Sat, 17 Nov 2012 12:43:54 GMT
Expires: 0
Content-type: text/html
Transfer-Encoding: chunked
返回的数据是 JSON,但我得到
警告:资源解释为脚本,但使用 MIME 类型 text/html 传输:“http://www.geobytes.com/IpLocator.htm?GetLocation&template=json.txt&callback=jsonpcallback&{%22ipaddress%22:%22200.167.254.166%22} &_=1353148931121"
远程 IpLocator.htm 上的错误:未捕获 SyntaxError:意外令牌:
在返回的数据上引发错误
{"geobytes":{"countryid":117,
我想可能是因为它是 117 而不是“117”,但我显然无法控制返回的数据。试图添加一个“processData = false”,但这没有帮助。
我已将错误处理添加到 ajax 并在状态上获取“parsererror”
我怎样才能解决这个问题?