配对中的第一个表单是通过ajax发送第二个表单数据。为什么呢?

时间:2018-01-28 04:53:50

标签: javascript jquery html ajax forms

这将是一个长期的问题吗?

Two separate forms nested in a div

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

enter image description here

如何让我的表单只发送自己包含的数据? 这是我当前运行的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
         ;




         }



     })

 }

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

1 个答案:

答案 0 :(得分:0)

您希望查看提交按钮以及在表单提交时执行的操作。

  1. 确保每个表单都有自己的提交按钮和自己的操作。
  2. 如果操作是JavaScript函数,请确保您使用的选择器正在选择要发送到服务器的正确表单。
  3. 这些问题通常会导致错误的HTML标记或在提交操作中运行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.