【问题标题】:1st form in pairing is sending 2nd form data via ajax. Why?配对中的第一种形式是通过 ajax 发送第二种形式的数据。为什么?
【发布时间】:2018-01-28 14:16:57
【问题描述】:

这将是一个很长的问题?

如您所见,我在此 div 中嵌套了两个表单。当我在不同的时间提交任一表单时,他们都通过 stripe.js 接收一个工作正常的令牌,支付流程中的其他功能工作正常。我的问题就在这里。下面是表单#credit-card发送给服务器的数据,所有表单数据都被封装了,应该不会溢出,但是有。表格一从整个页面发送数据,这导致数组,因为某些输入标签具有通用名称,我的服务器无法解析此信息。为什么会这样?

我怎样才能让我的表单只发送本身包含的数据? 这是我当前运行的将表单信息发送到服务器的 javascript 代码:

function stripeTokenHandler(token) {
  // Insert the token ID into the form so it gets submitted to the server
  var form = document.getElementById('credit-card');
  var hiddenInput = document.createElement('input');
  hiddenInput.setAttribute('type', 'hidden');
  hiddenInput.setAttribute('name', 'stripeToken');
  hiddenInput.setAttribute('value', token.id);
  form.appendChild(hiddenInput);
  varray=$(form).serializeArray();////serialize to objects -works-

 $.post("php/stripeApi.php",varray,function(result){


     switch (result){

         case "success":



         break
         ;
         default:
         $("#stripereturn-error").html(result);
         break
         ;




         }



     })

 }
function stripeACHTokenHandler(token) {
  // Insert the token ID into the form so it gets submitted to the server
  var form = document.getElementById('ach');
  var hiddenInput = document.createElement('input');
  hiddenInput.setAttribute('type', 'hidden');
  hiddenInput.setAttribute('name', 'stripeToken');
  hiddenInput.setAttribute('value', token.id);
  form.appendChild(hiddenInput);
  varray=$(form).serializeArray();////serialize to objects -works-

 $.post("php/stripeApi.php",varray,function(result){


     switch (result){

         case "success":



         break
         ;
         default:
         $("#stripereturn-error").html(result);
         break
         ;




         }



     })

 }

但希望我足够清楚。请不要投反对票,澄清的建议会很好。

【问题讨论】:

  • 你可以在这里添加你的html代码吗?
  • 感谢您的评论。我在这里附上了一个jsfiddle:jsfiddle.net/ymum9ueg
  • @CalixteSimeon 小提琴没有告诉我们表单在提交时会做什么。是否有使用 JavaScript 附加的事件?你能包括那些吗?
  • 我没有看到小提琴中发生这种情况。在提交信用卡表单时,它只提交与该表单相关的参数。我错过了什么吗?
  • @cdoshi 我也看不到。在这两种表单上都必须有 JavaScript 挂钩到“onsubmit”事件。 OP尚未发布该JS:p

标签: javascript jquery html ajax forms


【解决方案1】:

您想查看提交按钮和表单提交时执行的操作。

  1. 确保每个表单都有自己的提交按钮和自己的操作。
  2. 如果操作是 JavaScript 函数,请确保您使用的选择器选择正确的形式发送到服务器。

这些问题通常是由不正确的 HTML 标记或在提交操作上运行的 JavaScript 中的拼写错误引起的。

例如,如果您发布的 ^ JavaScript 代码是这两种表单的操作,那么您将始终发布信用卡表单。

我想说,您可以在选择正确的表单元素后创建一个包装函数来提交表单。如下所示:

// Call this on the Ach form's submit action
function submitAch(){
   var form = document.getElementById('ach');
   submitFormToStripe(form);
}

// Call this on the credit card form's submit action
function submitCreditCard(){
   var form = document.getElementById('credit-card');
   submitFormToStripe(form);
}

function submitFormToStripe(form) {
   var hiddenInput = document.createElement('input');
   hiddenInput.setAttribute('type', 'hidden');
   hiddenInput.setAttribute('name', 'stripeToken');
   hiddenInput.setAttribute('value', token.id);
   form.appendChild(hiddenInput);
   varray=$(form).serializeArray();////serialize to objects -works-

   $.post("php/stripeApi.php",varray,function(result)
}

Have a look here for form documentation as well.

【讨论】:

  • 遗憾的是这并没有改变结果。
  • @CalixteSimeon 并且您检查了为表单运行“onsubmit”的函数是否正确且不同?
猜你喜欢
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 2014-06-01
  • 2011-07-20
  • 2021-07-27
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
相关资源
最近更新 更多