Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.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_Php_Jquery_Ajax_Forms - Fatal编程技术网

Javascript 循环ajax只是偶尔提交

Javascript 循环ajax只是偶尔提交,javascript,php,jquery,ajax,forms,Javascript,Php,Jquery,Ajax,Forms,我正在处理一个动态页面,其中包含多个表单,用户可以添加和删除这些表单。我的jquery脚本将查找所有“表单”元素,并使用jQuerysAjax方法提交它们。这是剧本 $(document).ready(function () { (function (){ var id = $(document).data('campaign_id'); $(document).on('click', '#save-button', function () { $('form')

我正在处理一个动态页面,其中包含多个表单,用户可以添加和删除这些表单。我的jquery脚本将查找所有“表单”元素,并使用jQuerysAjax方法提交它们。这是剧本

$(document).ready(function () {
(function (){
    var id = $(document).data('campaign_id');
    $(document).on('click', '#save-button', function () {
        $('form').each(function (){
            var data = new FormData(this);
            var form = $(this);
            if(!form.parent().hasClass('hideme'))
            {
                $.ajax({
                    url: form.attr('action'),
                    type: 'POST',
                    data:  data,
                    mimeType:"multipart/form-data",
                    contentType: false,
                    cache: false,
                    processData:false,
                    success: function(data, textStatus, jqXHR)
                    {
                        console.log('form submitted '+count);
                    }
                });
            }
        });
        window.location.replace('/campaign');
    });
})(); //end SIAF
});//end document.ready

问题是,只有在表单提交时,如果我单击几次“保存”按钮或删除最后运行的window.location.redirect,我才能将表单提交到,我怀疑这与提交之前发生的重定向有关,但是在阅读了一些文档后,我不确定是否有解决方案,因为Ajax的异步特性让您感到困惑。不幸的是,Ajax不能以过程的方式工作。成功方法在Ajax请求完成时调用,这取决于您的internet连接速度和服务器的繁忙程度

完全有可能,javascript完成其每个循环,第一个ajax请求仍在发送或等待响应。当javascript准备好执行window.location调用时

编辑:

添加了检查表单数量和ajax请求数量的代码,一旦它们全部运行,它将重定向

$(document).ready(function () {
(function (){
    var id = $(document).data('campaign_id');
    var numForms = $('form').length;
    var numAjaxRequests= 0;

    $(document).on('click', '#save-button', function () {
        $('form').each(function (){
            var data = new FormData(this);
            var form = $(this);
            if(!form.parent().hasClass('hideme'))
            {
                $.ajax({
                    url: form.attr('action'),
                    type: 'POST',
                    data:  data,
                    mimeType:"multipart/form-data",
                    contentType: false,
                    cache: false,
                    processData:false,
                    success: function(data, textStatus, jqXHR)
                    {
                        console.log('form submitted '+count);
                        numAjaxRequests++;
                        if(numAjaxRequests == numForms) {
                          window.location.replace('/campaign');
                        }
                    }
                });
            }
        });

    });
})(); //end SIAF
});//end document.ready

那么,窗口的意义是什么。位置。替换“/活动”;?为什么在发送AJAX请求的同时尝试重定向?AJAX是异步的,您的window.replace将在第一个表单完成之前启动$。什么时候可以帮助解决此问题。或者,既然您正在重新定位,您是否考虑过将所有表单数据发布到服务器上的中间PHP文件以处理表单数据处理,然后从那里重定向?或者在/campaign上发布和处理表单数据?这非常有效,谢谢,我现在理解了为什么它不起作用,忘记了ajax中的“a”…如果您觉得答案有用,我可以请您投票并接受它,谢谢。