加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 02:51:29 所属栏目:百科 来源:网络整理
导读:这是我的代码.它试图加载Leaflet库.当我将crossDomain选项设置为true时,不会触发错误回调.当我将该选项设置为false时,会触发错误回调,但它无法下载js,因为它是跨域的. 为什么这么难?这有什么解决方案吗?有一个图像占位符而不是Web地图(最初不加载它并节省
这是我的代码.它试图加载Leaflet库.当我将crossDomain选项设置为true时,不会触发错误回调.当我将该选项设置为false时,会触发错误回调,但它无法下载js,因为它是跨域的.

为什么这么难?这有什么解决方案吗?有一个图像占位符而不是Web地图(最初不加载它并节省页面加载时间),当用户激活地图时,应加载js.但如果失败,我想显示正常的错误消息和重试按钮.

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

更新:我尝试完全回调,它也无法正常工作.

update2:同样适用于crossdomain $.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',timeout: 2000,// 2 seconds timeout before error function will be called
    dataType: 'script',crossDomain: true
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读