2012-04-12 35 views
0

我试图用下面的代码本身提交表单:

$('#invoices-bundle').submit(function(e) { 
    e.preventDefault(); // don't submit multiple times 
    this.submit(); 
    $.post('php/seller/invoice/invoice_print_batch.php', function(data){ 
     $('#added-invoices').html(data);            
    });// use the native submit method of the form element 
}); 

后提交();我想用我的PHP脚本的内容填充DOM。奇怪的是,DOM没有在我第一次提交表单时填充,但第二次和之后的每次都是。

不知道为什么会发生这种情况!有什么建议么?

谢谢!

+1

你的方法对我来说很奇怪。在“本地”提交表单(即非Ajax)之后,您正在对服务器进行Ajax调用并使用该响应!你需要明白,一旦你让浏览器向服务器发送一个非Ajax请求,那么浏览器的本质就是等待它的响应。一旦它得到它,它将用该响应中的任何内容替换当前页面。所以你当前的页面和DOM状态已经消失了。在'this.submit()'之后,你不应该做些什么。如果递交响应的时间太长,那么下面的代码将得到执行的机会,否则,不会。 – AppleGrew 2012-04-12 12:06:16

回答

2

当您使用this.submit();提交表格后,其余代码将无效。页面将会改变或刷新,并在阿贾克斯代码将被打破。将表单作为ajax发布,而不是定期提交或更改代码顺序,最后输入submit()

0

如果你想通过AJAX提交,那么你为什么包括'使用本机提交'的评论(这似乎与你的预设默认相冲突)?

看起来好像你会不是需要执行提交操作,当你正在执行的AJAX文章 - 它立即执行;你希望收集POST返回值并将它们提供给你的invoice_print_batch.php页面吗?页面上是否有表单元素需要同时发送?填充这些变量并将它们发送到您的$.post调用的数据参数中。

$('#invoices-bundle').submit(function(e) { 
    e.preventDefault(); // don't submit multiple times 
    var itemToSend = form.find('input[name="inputsName"]').val(); 
    // ...more? 
    $.post('invoice_print_batch.php', { value: itemToSend }, function(data) { 
     $('#added-invoices').html(data); 
    }); 
}); 

这里,value将在$ _POST为invoice_print_batch.php。

表单的自然提交已被避免,页面上的值已发送到您的php页面,并且该php POST的结果可以在当前页面上更新。

如果您的真实页面处理发生在当前页面上,您可能希望将处理移动到invoice_print_batch.php - 可能重命名该文件 - 并让该页面处理所有表单输入并返回/打印“回答'。最终结果将是一个页面,如果没有任何页面加载/重定向来处理提交,就会感觉更加快速。

您是否需要完整路径?为了便于阅读,我缩短了它,如果当前页面位于同一个目录中,则可以执行此操作(可能不会)。