我有以下代码,在单击链接时显示确认div。我第一次运行它时,当ajax请求完成时,deleteConfirmation div会向上滑动。但是当我第二次尝试(没有刷新)时,即使没有触发此点击,确认div也会在每次滑落时向上滑动。
$("#deleteConfirm").click(function() {
if(debug)
console.log("deleting "+$("#deleteConfirmationCampaign").html());
$("#mappingsRemove").html("Deleting Campaign and Mappings...");
// remove each mapping underneath the campaign
deleteCampaign(apiUrl, "mappings", account+"/"+campaignToDelete[1], "confirmDelete");
$(document).ajaxStop(function() {
$("#mappingsRemove").html("Finished");
// slide up the delete confirmation dialog
$("#deleteConfirmation").slideUp();
});
});
我的deleteCampaign函数中有多个请求,我使用的不正确吗?
我认为发生的事情是第一次触发它为ajaxStop设置全局监听器。当然这会一直触发,所以它总是试图滑动确认div。也许我需要在第一次滑动之后停止文件监听器到ajaxStop?
任何建议都会对你有所帮助!
答案 0 :(得分:2)
你对发生的事情是正确的。但我不确定ajaxStop是听的最佳事件。所有请求都完成后会触发,对吧?
我认为您只想对与您的deleteCampain函数相关的请求做出反应。
当所有重要请求都已返回时,您可以使用延迟来执行函数。
var ajax1 = $.ajax("/deleteCampain.php"),
ajax2 = $.ajax("/deleteCampain2.php");
$.when(ajax1, ajax2).then(function(){
$("#mappingsRemove").html("Finished");
$("#deleteConfirmation").slideUp();
});
见:
答案 1 :(得分:1)
您可以设置一个全局布尔值,因此它只运行一次:
$(document).ajaxStop(function() {
if (!window.firstStop) {
$("#mappingsRemove").html("Finished");
// slide up the delete confirmation dialog
$("#deleteConfirmation").slideUp();
window.firstStop = true;
}
});
答案 2 :(得分:1)
在第一轮请求完成后,我解除了文档和ajaxStop函数的绑定,
如果这会导致任何问题,请告知我们:
// listen for the ajax requests to finish
$(document).ajaxStop(function() {
// set the mappings remove to say finished
$("#mappingsRemove").html("Finished");
// slide up the delete confirmation dialog
$("#deleteConfirmation").slideUp();
// unbind the listener
$(document).unbind('ajaxStop');
});