jquery:提交表单两次

我正在为他们主持的活动创建一个客户注册表。 基本用户详细信息将提交给第三方系统(即名称,电子邮件等),但其余字段需要通过电子邮件发送给客户端。

我需要这样的事情发生:

  1. 项目清单
  2. 用户填写表格
  3. jquery bvalidator检查表单中的必填字段
  4. 表单(通过ajax)提交到单独的页面,其中电子邮件发送给客户端
  5. 然后将表单(常规POST方法)提交给第三方系统
  6. 成功用户被传递回’谢谢’url。

这是我尝试使用的代码,但是它会在循环中被反复提交到“电子邮件”页面,并且永远不会提交到外部URL。

如果我替换$('#form1').submit(); 通过警报,它只向电子邮件页面提交一次,然后正确显示警报。

 var myvalidator = $('#form1').bValidator(optionsGrey); $('#form1').submit(function() { if (myvalidator.isValid()) { $.ajax({ data: $('#form1').serialize(), type: "POST", url: "email_send.asp", success: function() { $('#form1').submit(); } }); } return false; }); 

有关如何解决这个问题的任何建议吗?

尝试:

 $('#form1').unbind('submit').submit(); 

尝试解除对成功的提交事件:通过调用unbind来调用ajax的方法

 $('#form1').unbind('submit'); $('#form1')[0].submit(); // call native submit 

http://api.jquery.com/unbind/

您可以使用unbind()恢复默认行为。

 var myvalidator = $('#form1').bValidator(optionsGrey); $('#form1').submit(function() { if(myvalidator.isValid()) { $.ajax({ data: $('#form1').serialize(), type: "POST", url: "email_send.asp", success: function(){ $('#form1').unbind('submit'); $('#form1').submit(); } }); } return false; }); 

嗯,我不确定我理解。 你总是提交给email_send.asp所以它取得的每一次成功都是如此,所以你似乎很清楚为什么你陷入了循环。

如果我理解你的话,第二次提交应该是另一个具有不同成功处理程序的URL,对吧?

因此,您可以只编写一个基本的ajax函数,而不是再次提交表单:

 $('#form1').submit(function () { if (myvalidator.isValid()) { $.ajax({ data: $('#form1').serialize(), type: "POST", url: "email_send.asp", success: function(){ $.ajax({ data: $('#form1').serialize(), type: 'POST', url: 'third_party.asp', success: function () { //display thank you message } }); } }); } }); 

编辑这是根据您的评论更新的答案:

 var myvalidator = $('#form1').bValidator(optionsGrey); $('#form1').submit(function(){ if(myvalidator.isValid()){ $.ajax({ data: $('#form1').serialize(), type: "POST", url: "email_send.asp", success: function(){ $('#form1').unbind('submit').submit(); } }); } return false; }); 

您可以使用jquery.form插件通过ajax提交表单。 结帐以下url: http : //jquery.malsup.com/form/

然后在你的js脚本中尝试这样的事情

 var myvalidator = $('#form1').bValidator(optionsGrey); $('#form1').submit(function(){ if(myvalidator.isValid()){ $(this).unbind('submit').submit(); }); 

你有理由不得不使用submit -method吗? 它进入无限循环的原因是因为它再次调用相同的提交事件侦听器。

如果没有,您可以将两个ajax-submits排队,一个到电子邮件页面,再一次到客户端。

最后,您可以取消绑定事件侦听器。 取消绑定事件侦听器的一种鲜为人知的方法是将事件对象传递给unbind -call。 这将仅取消绑定当前事件侦听器:

 $('#form1').submit(function(e){ if(myvalidator.isValid()){ $form = $('#form1'); $.ajax({ data: $form.serialize(), type: "POST", url: "email_send.asp", success: function(){ $form.unbind(e).submit(); } }); } return false; }); 

下面是一个示例代码,用于在不重定向的情况下将表单两次提交到不同的URL。 单击“测试”按钮两次。

      Insert title here     

我遇到了同样的问题。 然后我注意到我不小心将我的自定义javascript文件链接了两次,因此表单被两个脚本两次提交。 通过删除页面页脚的一个脚本链接解决了该问题。