在一个网站中,我有几个由事件加载的 ajax 部分,主要是点击。为了通知访问者,显示了加载部分。这在大多数情况下都很好用,但有时 ajax 调用接收响应的速度太快会干扰 beforeSend。
我的典型结构如下所示:
$(document).on('click', '.handler', function() {
var target = $(this).attr('data-targetElement');
$.ajax({
url: '/ajax.php?someParameter=hasValue',
beforeSend: showLoading(target)
})
.done(function(response) {
console.log('Hi there, I\'m done!');
$('#' + target).html(response);
});
});
// This is in a function because it's used by all ajax-calls
function showLoading(target) {
$('#' + target).html('My loading message');
}
问题是,当我检查控制台消息时,加载消息仍然显示,即使已达到 .done(),因为 Hi there, I'm done!
显示.
所以看起来 beforeSend 似乎没有达到完成状态或类似导致它“卡住”的状态,因为 targetElement 中的内容没有用 ajax 调用的响应更新。
我不确定如何解决这个问题。有什么建议吗?
更新, 抱歉打错了,我只是在这里输入了示例代码...
最佳答案
首先,您需要修复代码中的所有语法错误。 删除语句中间的
;
。$.ajax({ beforeSend: showLoading(target); // ^ SYNTAX ERROR })
当您编写
showLoading(target)
时,您会立即调用showLoading()
函数。如果您需要将其设置为带参数的回调,则需要传递一个返回回调的函数。
beforeSend: function() { showLoading(target); }
关于php - jQuery ajax beforeSend 干扰 .done(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32025260/