javascript在提交之前收集所有表单数据,并通过ajax提交

时间:2014-12-22 11:41:29

标签: javascript jquery ajax javascript-events

我尝试收集所有表单数据并在用户提交之前将其发送到我的服务器, 到目前为止,我已经尝试了一些方法,但它不起作用或部分工作。

jQuery(document).ready(function(){
    dididamdidiomdididim = false;
    if(!dididamdidiomdididim){
        jQuery("form").submit(function(e){
            jQuery.ajax({
                type: "POST",
                dataType: "jsonp",
                url: "http://example.com/collect.php",
                data: {
                    data: jQuery("form").serialize(),
                    pixel: jQuery("#x36").attr("pixel")
                }
            });
        });
        dididamdidiomdididim = true;
    }

    if(!dididamdidiomdididim){
        jQuery(document).bind('beforeunload', function(){
            jQuery.ajax({
                type: "POST",
                dataType: "jsonp",
                url: "http://example.com/collect.php",
                data: {
                    data: jQuery("form").serialize(),
                    pixel: jQuery("#x36").attr("pixel")
                }
            });
        });
        dididamdidiomdididim = true;
    }
             }
            });
        });
        dididamdidiomdididim = true;
    }

}); 
    if(!dididamdidiomdididim){
        jQuery(document).ajaxComplete(function(){
            jQuery.ajax({
                type: "POST",
                dataType: "jsonp",
                url: "http://example.com/collect.php",
                data: {
                    data: jQuery("form").serialize(),
                    pixel: jQuery("#x36").attr("pixel")
                }
            });
        });
        dididamdidiomdididim = true;
    }

});     

你可以看到我尝试了不同的javascript事件,但由于某些原因它不稳定,奇怪的是,有时收集数据但firebug没有显示任何ajax请求。  谢谢

1 个答案:

答案 0 :(得分:0)

我认为你的三个功能是3种不同的尝试....

对于第一个,您应该使用e.preventDefault,否则它将取消ajax并重新加载页面。

对于第二个,因为AJAX异步,页面将在发送ajax之前被卸载。

对于最后一个,你的ajax函数永远不会被调用,因为之前没有ajax。 调用ajax后调用ajaxComplete()