我有一个函数 someFunction(),它通过jQuery发送ajax requets。
如果用户点击满意,请求似乎被覆盖......我无法弄清楚原因。
var request = $.ajax(customObject);
request.done(doneFunction);
request.fail(failFunction);
传递给 doneFunction()的XHR对象&每次用户触发函数时, failFunction()都会被覆盖。
这是一个问题,因为 doneFunction()& failFunction()使用带有回调的延迟动画来在动画完成时更改html(从XHR对象派生)。
有任何想法/建议吗?
答案 0 :(得分:0)
您可以添加一个变量来检查是否已经发送了请求,并阻止发送另一个请求,直到完成为止。像这样:
var requestSent = false;
function someFunction() {
if (!requestSent) {
requestSent = true;
$.ajax({
url: [url],
type: [type],
data: [data],
success: function (xhr) {
doneFunction(xhr);
requestSent = false;
},
failure: function (xhr) {
failFunction(xhr);
requestSent = false;
}
});
}
}
答案 1 :(得分:0)
一种简单的方法是隐藏或禁用按钮,直到ajax调用返回。在someFunction()
中,您可以停用该按钮,并显示“加载”微调器图像,然后在success
和failure
回调中启用该按钮,然后删除“加载”微调器。
如果要允许多个请求,则需要实现队列,并按顺序进行AJAX调用。基本上,创建一个对象来保存AJAX函数的队列。当一个请求返回时,然后调用下一个请求。以下是一些例子: