向序列化表单数据添加其他数组

时间:2020-06-29 17:07:55

标签: jquery ajaxform

我想发表一个ajax jquery帖子。我已经序列化了表单数据,但是我的端点要求将其他值添加到序列化的表单数据中,以便一起发布。

要附加到序列化表格数据的对象是

"bridgeConfigurations": [
    {
        "configName":"Provider_Account_Id",
        "configValue":"xxxxx"
    },
    {
    "configName":"Provider_Auth_Token",
    "configValue":"xxxxx"
    }
]

有关如何实现此目标的任何帮助

2 个答案:

答案 0 :(得分:1)

我推荐的一个有用的API是FormData API

// Your object
const cfg = {
  "bridgeConfigurations": [{
      "configName": "Provider_Account_Id",
      "configValue": "xxxxx"
    },
    {
      "configName": "Provider_Auth_Token",
      "configValue": "xxxxx"
    }
  ]
};

$("#cfgForm").on("submit", function(ev) {
  ev.preventDefault(); // Prevent browser follow form-Action

  // Init FormData for form and its current fields values
  const FD = new FormData(this); // `this` is the cfgForm

  // Add bridgeConfigurations stuff to formData
  cfg.bridgeConfigurations.forEach(item => {
    FD.append("configName[]", item.configName);
    FD.append("configValue[]", item.configValue);
  });

  // Send the FormData
  $.ajax({
    url: "example.php",
    type: "POST",
    processData: false, // https://api.jquery.com/jquery.ajax/
    data: FD, // pass the formData 
  }).done(function(response) {
    console.log(response);
  });

});

答案 1 :(得分:0)

您可以像这样合并,我不确定您的确切期望是什么。我添加了3个示例:

var $form = $('form');
var data = {
  "bridgeConfigurations": [
    {
      "configName":"Provider_Account_Id",
      "configValue":"xxxxx"
    },
    {
      "configName":"Provider_Auth_Token",
      "configValue":"xxxxx"
    }
  ]
};

// EXAMPLE 1
let formData = $($form).serializeArray();
let mergeData = $.merge(formData, data["bridgeConfigurations"]);
let finalData = JSON.stringify(mergeData);
console.log("Example 1: ", finalData);

// EXAMPLE 2
let formData1 = $($form).serializeArray();
let mergeData1 = $.merge(formData1, [data]);
let finalData1 = JSON.stringify(mergeData1);
console.log("Example 2: ", finalData1);

// EXAMPLE 3
let formData2 = $($form).serializeArray();
let formDatas2 = {};
formData2.forEach((value) => { formDatas2[value['name']] = value['value']; });
let mergeData2 = $.extend({}, formDatas2, data);
let finalData2 = JSON.stringify(mergeData2);
console.log("Example 3: ", finalData2);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <input type="text" name="name" value="demoName">
  <input type="email" name="email" value="dummy@mail.com">
</form>

希望获得帮助。