Jquery ajax 进行网络请求,同步阻塞引起的UI线程阻塞 (loading图片不显示 )
解释:
在使用 jQuery 的 $.ajax
进行异步网络请求时,默认情况下是不会阻塞UI线程的。但如果你将 async
参数设置为 false
,这样会导致请求变成同步阻塞请求,在这种模式下,JS引擎会阻塞其他所有操作,直到请求完成。这种情况下,如果你的网络请求耗时很长,可能会导致页面出现卡顿,表现为loading图标不显示。
解决方法:
- 确保
async
参数设置为true
,这是$.ajax
的默认值,意味着请求是异步的,不会阻塞UI线程。 - 如果你需要使用同步请求,可以考虑将请求分块进行,或者通过其他方式保证请求时间不会过长,从而避免UI线程阻塞。
- 可以在请求开始时显示loading图片,在请求结束后再将其隐藏。
示例代码:
// 显示loading图片
$("#loading").show();
// 使用$.ajax进行异步网络请求
$.ajax({
url: 'your-endpoint-url',
type: 'GET', // 或者 'POST',根据需要选择
data: {
// 你的请求数据
},
success: function(response) {
// 请求成功处理
},
error: function(xhr, status, error) {
// 请求失败处理
},
complete: function() {
// 请求完成处理,隐藏loading图片
$("#loading").hide();
}
});
在这个示例中,我们首先显示loading图片,然后发起异步请求,并在请求完成后(不论成功或失败)隐藏loading图片。这样可以保证在进行网络请求时,用户界面保持响应。
评论已关闭