我曾尝试编写一些 jQuery,一旦单击按钮,它就会轮询服务器,一旦操作完成,它就会在网页上显示消息。
这部分按预期工作,一旦点击按钮,就会出现微调器,投票显示显示发送的电子邮件数量。发送完所有电子邮件后,它会显示正确的消息,显示已发送的电子邮件数量以及发送失败的电子邮件数量。
问题是,如果我然后再次单击该按钮,即使轮询正在运行并且不会消失,也会出现上一条消息,并且微调器也不会出现。
任何人都可以帮助解决这个问题
因为我不知道为什么会发生
$(document).ready(function () {
$("#spinner").hide();
function doPoll() {
$("#progressSend").html("");
$("#progressSend").empty();
$("#spinner").show();
$.post("/pathtopolling", function (data) {
if (data.startsWith("Completed")) {
$("#progressSend").html("");
$("#progressSend").html("<p class=\"text-info\">" + data + "1</p>");
$("#spinner").hide();
clearTimeout(doPoll);
}
else if (data.startsWith("Unable")) {
$("#progressSend").html("");
$("#progressSend").html("<p class=\"text-info\">" + data + "2</p>");
$("#spinner").hide();
clearTimeout(doPoll);
}
else {
$("#progressSend").html("");
$("#progressSend").html("<p class=\"text-info\">" + data + "3</p>");
setTimeout(doPoll, 500);
}
});
}
var form = $("#frmSendMailingList");
$(form).on("click", function (event) {
$("#spinner").show();
$("#progressSend").html("");
$("#progressSend").empty();
doPoll();
event.preventDefault();
jQuery.ajax({
type: "POST",
url: $(form).attr("action"),
data: $(form).serialize(),
dataType: "json",
cache: false,
async: true,
processData: false,
success: function(result) {
$("#spinner").hide();
$("#progressSend").html("<p class=\"text-info\">" + result + "4</p>");
clearTimeout(doPoll);
},
error: function(err) {
$("#spinner").hide();
clearTimeout(doPoll);
}
});
});
$("#btnMailingListReset").click(function () {
location.reload(true);
clearTimeout(doPoll);
});
}).
像@SahilSharma 一样,您应该将此事件附加到button
. 但是,您的问题很正常,因为每次单击时都会触发回调。
你必须在开始时声明一个布尔值 false ,如果点击被触发并且这个布尔值是 false :将它设置为 true。并在 ajax 完成后将其设置回 false。
// the boolean
var clicked = false;
$('#btnSendMailingList').on("click", function (event) {
if(!clicked){
clicked = true;
$("#spinner").show();
$("#progressSend").html("");
$("#progressSend").empty();
doPoll();
event.preventDefault();
jQuery.ajax({
type: "POST",
url: $(form).attr("action"),
data: $(form).serialize(),
dataType: "json",
cache: false,
async: true,
processData: false,
success: function(result) {
$("#spinner").hide();
$("#progressSend").html("<p class=\"text-info\">" + result + "4</p>");
clearTimeout(doPoll);
},
error: function(err) {
$("#spinner").hide();
clearTimeout(doPoll);
},
complete: function(){
clicked = false;
}
}
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句