ajax - jQuery 不会使用跨域脚本触发错误回调

标签 ajax jquery cross-domain

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

为什么这么难?有什么办法解决这个问题吗?有一个图像占位符而不是网络 map (最初不加载它并节省页面加载时间),并且当用户激活 map 时,应该加载 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(...)

最佳答案

跨域和 Ajax 有时真的很烦人。这是一个 JavaScript 问题,而不仅仅是 jQuery 问题。

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

当您进行跨域调用时,将 crossDomain 设置为 true,则不会因为 JavaScript 的跨域限制而陷入错误。

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

第一个,如果您有权访问正在调用的后端系统,则可以设置(在我的示例 PHP 中) header 以允许跨域调用。 (我假设您在这里请求 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
});

关于ajax - jQuery 不会使用跨域脚本触发错误回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10093497/

相关文章:

javascript - jquery 加载函数后 JS 崩溃

javascript - jquery表单发送ajax

javascript - 删除 div 内的 div 内的最后一个 div

javascript - 在使用 bootstrap 时,如何使用 javascript 将 div 设置为其他两个 div 的高度

Firefox 字体问题 - Bootstrap Glyphicons

Javascript jquery 联系 API

javascript - 使用 jquery 将键盘焦点设置为具有类 "active"的项目

android - Sencha Touch 2 - 如何在加载 View 后运行函数?

javascript - JavaFX WebView 禁用同源策略(允许跨域请求)

android - 网络错误 : XmlHttpRequest Exception 101 in Android