这是众所周知的 JSONP 调用。根据$.ajax http://api.jquery.com/jQuery.ajax/参考error
:
注意:跨域脚本和跨域 JSONP 请求不会调用此处理程序。
另请注意,不支持同步 JSONP 调用:
跨域请求和dataType:“jsonp”请求不支持同步操作。
解决方法通常涉及 1) 设置调用超时或 2) 使用插件添加更典型的error
功能。
1)设置超时(和async true)
var jqXHR = jQuery.ajax({
type: 'GET',
async: true,
cache: false,
url: 'http://ip.jsontest.com.BADURL/',
contentType: 'application/json; charset=UTF-8',
crossDomain: true,
dataType: 'jsonp',
timeout: 2000
})
.fail(function (jqXHR, textStatus, errorThrown) {
console.log('fail was called');
})
.done(function (data, textStatus, jqXHR) {
console.log('Your IP is ' + data.ip);
console.log('done was called');
})
.always(function (dataOrjqXHR, textStatus, jqXHRorErrorThrown) { console.log('always was called'); });
2) The jQuery JSONP 插件 https://github.com/jaubourg/jquery-jsonp它增加了错误恢复功能。