在我的网站中,我有一个下载JSON数据的过程。在此期间,我全屏显示了一个旋转的div。对于FF和IE,div在开始下载之前是可见的,但在Chrome和Safari中则不可见。
JSFiddle链接在这里:https://jsfiddle.net/r6s0cr31/4/,背景颜色在Chrome和Safari上不会改变,对于IE和FF,背景颜色之前会改变。
$('#mapLoading').show();
$.ajaxSetup({async: false});
$.getJSON("https://router.project-osrm.org/route/v1/driving/0,40;0,42?overview=full&alternatives=true&steps=true",
function( response ) {
}
)
$('#mapLoading').hide();
如果我在 getJSON 之前在控制台(chrome(中放置一个停止点,我可以看到div 正确显示。我试图在没有 JQuery 的纯 JS 中做到这一点,但问题似乎是相同的。
提前感谢您的帮助
而不是使用同步(冻结浏览器(,使用异步并在获得响应后隐藏它将解决问题:
$('#btn').click(function(){
$('#mapLoading').show();
$.getJSON("https://router.project-osrm.org/route/v1/driving/0,40;0,42?overview=full&alternatives=true&steps=true")
.then(function(response){
$('#mapLoading').hide();
})
})
https://jsfiddle.net/r6s0cr31/7/
您正在使用与 chrome 代码无关的已弃用异步错误 在 ajax 调用超时之前冻结将解决问题
setTimeout(function () {
$.ajaxSetup({async: false});
$.getJSON("https://router.project-osrm.org/route/v1/driving/0,40;0,42?overview=full&alternatives=true&steps=true",
function( response ) {
}
)
$('#mapLoading').hide();
}, 20);
在您的情况下,代码被执行,但在回调后看到
在这里工作小提琴 https://jsfiddle.net/r6s0cr31/5/
似乎Chrome和Safari在执行后首先运行该函数并重新渲染页面内容。因此看不到任何变化。
正如Andy Chen已经写过的那样,即使在用户体验方面,最好是异步:
$('#btn').click(function(){
$('#mapLoading').show();
$.getJSON("https://router.project-osrm.org/route/v1/driving/0,40;0,42?overview=full&alternatives=true&steps=true",
function( response ) {
/* ...code here... */
$('#mapLoading').hide();
}
)
})
感谢您的回复,我了解到:- 没有异步请求冻结Chrome和Safari- Chrome和Safari首先运行该功能,然后更新页面设计。
再次感谢