jQuery不会触发错误回调与跨域脚本

问题描述:

这是我的代码。它试图加载Leaflet库。当我将crossDomain选项变为true时,错误回调不会被触发。当我将该选项设置为false时,会触发错误回调,但无法下载js,因为它是跨域。jQuery不会触发错误回调与跨域脚本

为什么这么难?有没有解决这个问题的方法?有一个图像占位符,而不是一个网络地图(最初不加载并保存页面加载时间),并且当用户激活地图时,应该加载js。但如果失败,我想显示一个正常的错误信息和一个重试按钮。

$.ajax({ 
    url: 'http://code.leafletjs.com/leaflet-0.3.1/leaflet.js', 
    success: start_map, 
    error: show_map_error, 
    dataType: 'script', 
    crossDomain: true 
}); 

更新:我试过complete回调,这也不行。

update2:同样适用于跨域$.getScript(...).fail(...)

Crossdomain和Ajax现在真的很烦人。这是一个JavaScript问题,而不仅仅是一个jQuery问题。

基本上是这样的:当你关闭跨域功能时,错误将会触发,因为jQuery/JavaScript期望有相同的域调用。事实并非如此,所以它失败了。

当您正在进行跨域调用,并且crossDomain设置为true时,由于JavaScript的跨域限制,您不会陷入错误。

对此有一些解决方案(或解决方法)。

首先,如果您有权访问您所调用的后端系统,则可以设置(在我的示例中为PHP)标头以允许跨域调用。 (我假设你在这里请求JSONP?)。当你这样做时,JavaScript接受这个调用,并且不需要跨域技巧。

header('Access-Control-Allow-Origin: http://domain1.com, http://domain2.com'); //whitelist 

看吧:Cross domain xmlhttp

如果你有到后台进不去了,你需要做一个解决办法,这基本上是对AJAX调用超时为永远不会在错误的功能。然而,这种解决方法非常肮脏,当线路出现故障或互联网速度很慢时,此超时将会触发。

$.ajax({ 
    url: 'http://code.leafletjs.com/leaflet-0.3.1/leaflet.js', 
    success: start_map, 
    error: show_map_error, 
    timeout: 2000, // 2 seconds timeout before error function will be called 
    dataType: 'script', 
    crossDomain: true 
});