Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用户提交弹出表单时发送多个ajax调用_Javascript_Jquery_Ajax_Popup - Fatal编程技术网

Javascript 用户提交弹出表单时发送多个ajax调用

Javascript 用户提交弹出表单时发送多个ajax调用,javascript,jquery,ajax,popup,Javascript,Jquery,Ajax,Popup,在我的应用程序中,有一个jQuery弹出窗口,我在其中列出供应商以及每个供应商前面的复选框。然后,用户可以选中每个供应商的其中一个复选框,然后按delete按钮删除供应商。但是,一旦用户单击delete按钮,ajax调用就会正确地发送到服务器端,并在服务器端正确地删除供应商(已删除的供应商不再显示在列表中)。当用户再次这样做时,我注意到弹出窗口向服务器端发送了两个ajax请求。如果用户第三次单击,弹出窗口将发送三次ajax请求,以此类推 var ajaxURL = getFormAction('

在我的应用程序中,有一个jQuery弹出窗口,我在其中列出供应商以及每个供应商前面的复选框。然后,用户可以选中每个供应商的其中一个复选框,然后按delete按钮删除供应商。但是,一旦用户单击delete按钮,ajax调用就会正确地发送到服务器端,并在服务器端正确地删除供应商(已删除的供应商不再显示在列表中)。当用户再次这样做时,我注意到弹出窗口向服务器端发送了两个ajax请求。如果用户第三次单击,弹出窗口将发送三次ajax请求,以此类推

var ajaxURL = getFormAction('crm.web.SupplierManager', 
'deleteSupplierRequestAjax');
$("#deleteBtnId").click(function( event ) {
    $( "#supplierDeleteConfirmDivId" ).dialog( "open" );
    $( "#supplierPopupCancelBtnId" ).click(function( event ) {
    $( "#supplierDeleteConfirmDivId" ).dialog( "close" );
    event.preventDefault();
});
$( "#supplierPopupOkBtnId" ).click(function( event ) {
    $( "#supplierDeleteConfirmDivId" ).dialog( "close" );
        $("#supplierPopupOkBtnId").mask("Waiting...");
        $.ajax({
            type: 'POST',
            data: $("#formId").serialize(),
            url: ajaxURL,
            success: function (data) {
                $("#supplierPopupOkBtnId").html(data);
                $("#supplierPopupOkBtnId").unmask();
            },
            error: function(jQXHR, textStatus, errorThrown) {
                $("#supplierPopupOkBtnId").unmask();
                handleAjaxError(jQXHR, textStatus, errorThrown);
            }
        });
    });
event.preventDefault();
});
对我来说,这就像表单一样,每次用户单击“删除”按钮时,渲染都会累积到弹出窗口中。我不确定这是真正的原因。我猜是
$(“#formId”)。serialize()
麻烦了。有人有不同的想法吗?

关于:

$( "#supplierPopupCancelBtnId" ).click(function( event ){})
每次在按钮上创建一个新的侦听器时,这是累积的

试试“一”:

从jquery文档:

.one()方法与.on()相同,不同之处在于给定元素和事件类型的处理程序在第一次调用后解除绑定。

With:

$( "#supplierPopupCancelBtnId" ).click(function( event ){})
每次在按钮上创建一个新的侦听器时,这是累积的

试试“一”:

从jquery文档:


“除了给定元素和事件类型的处理程序在第一次调用后解除绑定外,.one()方法与.on()相同。”

可以尝试使用async:false,不要使用
async:false
,不推荐使用。如果您需要异步代码,请参阅
承诺
。谢谢@Zenoo知道这是怎么回事吗?可以尝试使用async:false,不要使用
async:false
,这是不推荐的。如果您需要异步代码,请参阅
承诺
。谢谢@Zenoo知道这是怎么回事吗?请应用您的建议。对你说得对。它工作正常。非常感谢。应用你的建议。对你说得对。它工作正常。非常感谢。