【问题标题】:How to convert FormData (HTML5 object) to JSON如何将 FormData(HTML5 对象)转换为 JSON
【发布时间】:2017-05-16 19:49:10
【问题描述】:

如何将 HTML5 FormData 对象中的条目转换为 JSON?

该解决方案不应使用 jQuery。此外,它不应该简单地序列化整个 FormData 对象,而应该只序列化它的键/值条目。

【问题讨论】:

标签: javascript json form-data


【解决方案1】:

您也可以直接在FormData 对象上使用forEach:

var object = {};
formData.forEach(function(value, key){
    object[key] = value;
});
var json = JSON.stringify(object);

更新:

对于那些喜欢与ES6 arrow functions 相同的解决方案的人:

var object = {};
formData.forEach((value, key) => object[key] = value);
var json = JSON.stringify(object);

更新 2:

对于那些想要支持多选列表或其他具有多个值的表单元素的人(因为关于这个问题的答案下面有很多 cmets,我将添加一个可能的解决方案): p>

var object = {};
formData.forEach((value, key) => {
    // Reflect.has in favor of: object.hasOwnProperty(key)
    if(!Reflect.has(object, key)){
        object[key] = value;
        return;
    }
    if(!Array.isArray(object[key])){
        object[key] = [object[key]];    
    }
    object[key].push(value);
});
var json = JSON.stringify(object);

Here a Fiddle通过一个简单的多选列表演示了这种方法的使用。

更新 3:

作为最后的补充说明,如果将表单数据转换为 json 的目的是通过 XML HTTP 请求将其发送到服务器,您可以直接发送 FormData 对象而不进行转换。就这么简单:

var request = new XMLHttpRequest();
request.open("POST", "http://example.com/submitform.php");
request.send(formData);

见also Using FormData Objects on MDN for reference:

更新 4:

正如我的回答下面的 cmets 之一所述,JSON stringify 方法不适用于所有类型的对象。有关支持哪些类型的更多信息,我想参考the Description section in the MDN documentation of JSON.stringify。

在描述中还提到:

如果该值有一个 toJSON() 方法,它负责定义哪些数据将被序列化。

这意味着您可以为自己的toJSON 序列化方法提供用于序列化自定义对象的逻辑。像这样,您可以快速轻松地为更复杂的对象树构建序列化支持。

【讨论】:

  • 正如@TomasPrado 的回答中提到的,确保您不需要支持 IE11。
  • 这不适用于多选表单元素,因为它们共享相同的键,您最终会覆盖仅返回最后一个选定元素的值
  • formData 不是一个系列。你怎么能迭代?接受了答案,但遗漏了一些东西。
  • 除非需要多选等。JSON.stringify(Object.fromEntries(formData)); 的答案要好得多
【解决方案2】:

2019年,这种任务变得超级简单。

JSON.stringify(Object.fromEntries(formData));

Object.fromEntries:在 Chrome 73+、Firefox 63+、Safari 12.1 中支持

【讨论】:

  • 来到这里发布这个,喜欢看这个帖子,看看这些年来答案是如何演变的
  • 这似乎不适用于具有多个同名字段的表单。
  • 现在是 2020 年,这不处理 <select multiple> 或 <input type="checkbox"> 的多个选定值?
  • 最好使用formData.entries:JSON.stringify(Object.fromEntries(formData.entries()));
  • @Kohver,为什么更好?它会删除重复项吗?它解决了什么样的问题才能让它变得更好?
【解决方案3】:

这是一种在不使用库的情况下以更实用的方式来实现它的方法。

Array.from(formData.entries()).reduce((memo, [key, value]) => ({
  ...memo,
  [key]: value,
}), {});

例子:

document.getElementById('foobar').addEventListener('submit', (e) => {
  e.preventDefault();

  const formData = new FormData(e.target);
  const data = Array.from(formData.entries()).reduce((memo, [key, value]) => ({
    ...memo,
    [key]: value,
  }), {});
  document.getElementById('output').innerHTML = JSON.stringify(data);
});
<form id='foobar'>
  <input name='baz' />
  <input type='submit' />
</form>

<pre id='output'>Input some value and submit</pre>

【讨论】:

  • 我真的很喜欢这个答案,但仍然不处理多个项目。我基于这个发布了一个新的答案来处理这些情况。
  • 我建议将 pair 替换为 [key, value] 以利用解构并提高可读性
【解决方案4】:

如果您有多个具有相同名称的条目,例如,如果您使用 &lt;SELECT multiple&gt; 或有多个具有相同名称的 &lt;INPUT type="checkbox"&gt;,则需要注意这一点并创建一个值数组。否则,您只会获得最后选择的值。

这是现代 ES6 变体:

function formToJSON( elem ) {
  let output = {};
  new FormData( elem ).forEach(
    ( value, key ) => {
      // Check if property already exist
      if ( Object.prototype.hasOwnProperty.call( output, key ) ) {
        let current = output[ key ];
        if ( !Array.isArray( current ) ) {
          // If it's not an array, convert it to an array.
          current = output[ key ] = [ current ];
        }
        current.push( value ); // Add the new value to the array.
      } else {
        output[ key ] = value;
      }
    }
  );
  return JSON.stringify( output );
}

稍旧的代码(但 IE11 仍然不支持,因为它不支持 FormData 上的 ForEach 或 entries)

function formToJSON( elem ) {
  var current, entries, item, key, output, value;
  output = {};
  entries = new FormData( elem ).entries();
  // Iterate over values, and assign to item.
  while ( item = entries.next().value )
    {
      // assign to variables to make the code more readable.
      key = item[0];
      value = item[1];
      // Check if key already exist
      if (Object.prototype.hasOwnProperty.call( output, key)) {
        current = output[ key ];
        if ( !Array.isArray( current ) ) {
          // If it's not an array, convert it to an array.
          current = output[ key ] = [ current ];
        }
        current.push( value ); // Add the new value to the array.
      } else {
        output[ key ] = value;
      }
    }
    return JSON.stringify( output );
  }

【讨论】:

  • 但是当只有1个复选框被选中时,该值仍然是一个字符串,而不是一个数组。
  • 没错。由于您可以拥有多种类型的同名字段,因此我决定设置第一次出现的值,并且仅在找到多个值时将其转换为数组。我不想先扫描表单以查找可能导致数组的字段名称。
【解决方案5】:

如果需要支持序列化嵌套字段,类似于PHP处理表单字段的方式,可以使用如下函数

function update(data, keys, value) {
  if (keys.length === 0) {
    // Leaf node
    return value;
  }

  let key = keys.shift();
  if (!key) {
    data = data || [];
    if (Array.isArray(data)) {
      key = data.length;
    }
  }

  // Try converting key to a numeric value
  let index = +key;
  if (!isNaN(index)) {
    // We have a numeric index, make data a numeric array
    // This will not work if this is a associative array 
    // with numeric keys
    data = data || [];
    key = index;
  }
  
  // If none of the above matched, we have an associative array
  data = data || {};

  let val = update(data[key], keys, value);
  data[key] = val;

  return data;
}

function serializeForm(form) {
  return Array.from((new FormData(form)).entries())
    .reduce((data, [field, value]) => {
      let [_, prefix, keys] = field.match(/^([^\[]+)((?:\[[^\]]*\])*)/);

      if (keys) {
        keys = Array.from(keys.matchAll(/\[([^\]]*)\]/g), m => m[1]);
        value = update(data[prefix], keys, value);
      }
      data[prefix] = value;
      return data;
    }, {});
}

document.getElementById('output').textContent = JSON.stringify(serializeForm(document.getElementById('form')), null, 2);
<form id="form">
  <input name="field1" value="Field 1">
  <input name="field2[]" value="Field 21">
  <input name="field2[]" value="Field 22">
  <input name="field3[a]" value="Field 3a">
  <input name="field3[b]" value="Field 3b">
  <input name="field3[c]" value="Field 3c">
  <input name="field4[x][a]" value="Field xa">
  <input name="field4[x][b]" value="Field xb">
  <input name="field4[x][c]" value="Field xc">
  <input name="field4[y][a]" value="Field ya">
  <input name="field5[z][0]" value="Field z0">
  <input name="field5[z][]" value="Field z1">
  <input name="field6.z" value="Field 6Z0">
  <input name="field6.z" value="Field 6Z1">
</form>

<h2>Output</h2>
<pre id="output">
</pre>

【讨论】:

  • 需要在“函数更新(数据,键,值){”中将“数据”的默认值从数组“[]”更新为对象“{}”,它消除了空白数组问题。跨度>
  • 我还建议在reduce之前添加一个数组过滤器以从最终对象中删除空字段
  • @ChintanMathukiya Maia 你能分享一下你有意外输出的示例输入吗?
  • @Ednilson 你能分享你看到空数组输出的示例数据吗?
【解决方案6】:

您可以通过使用FormData() 对象来实现此目的。这个 FormData 对象将使用表单的当前键/值填充,使用键的每个元素的 name 属性及其值的提交值。它还将对文件输入内容进行编码。

例子:

var myForm = document.getElementById('myForm');
myForm.addEventListener('submit', function(event)
{
    event.preventDefault();
    var formData = new FormData(myForm),
        result = {};

    for (var entry of formData.entries())
    {
        result[entry[0]] = entry[1];
    }
    result = JSON.stringify(result)
    console.log(result);

});

【讨论】:

  • 这不会产生json
  • @Liam 你用表单元素试过这个吗?让我知道为什么它不产生 JSON 对象?
  • 没有json对象这样的东西。 Json 是一个字符串表示法
  • @Liam 创建对象后,他们可以使用 JSON.stringify(result)。我已经编辑了我的答案。请检查一下。并撤回反对票。
  • 如果您使用 ES6,您还可以使 for of 语句更具表现力:for (const [key, value] of formData.entries())
【解决方案7】:

这篇文章已经有一年了......但是,我真的,真的很喜欢 ES6 @dzuc 的答案。但是,由于无法处理多个选择或复选框,因此它是不完整的。这已经指出并提供了代码解决方案。我发现它们很重并且没有优化。所以我基于@dzuc写了2个版本来处理这些情况:

  • 用于 ASP 样式的表单,其中多个项目名称可以简单地重复。
let r=Array.from(fd).reduce(
  (o , [k,v]) => (
     (!o[k])
     ? {...o , [k] : v}
     : {...o , [k] : [...o[k] , v]}
   )
   ,{}
);
let obj=JSON.stringify(r);

单行Hotshot版本:

Array.from(fd).reduce((o,[k,v])=>((!o[k])?{...o,[k]:v}:{...o,[k]:[...o[k],v]}),{});
  • 对于 PHP 样式的表单,其中多个项目名称必须具有 [] 后缀。
let r=Array.from(fd).reduce(
  (o , [k,v]) => (
    (k.split('[').length>1)
    ? (k=k.split('[')[0]
      , (!o[k])
      ? {...o , [k] : [v]}
      : {...o , [k] : [...o[k] , v ]}
    )
    : {...o , [k] : v}
  )
  ,{}
);
let obj=JSON.stringify(r);

单行Hotshot版:

Array.from(fd).reduce((o,[k,v])=>((k.split('[').length>1)?(k=k.split('[')[0],(!o[k])?{...o,[k]:[v]}:{...o,[k]:[...o[k],v]}):{...o,[k]:v}),{});
  • 支持多级数组的 PHP 表单扩展。

自从我上次写上第二个案例以来,在工作中遇到了一个案例,即 PHP 表单具有多级复选框。我写了一个新案例来支持以前的案例和这个案例。我创建了一个 sn-p 来更好地展示这个案例,这个演示的结果显示在控制台上,根据您的需要进行修改。试图在不影响性能的情况下尽我所能优化它,但是,它损害了一些人类可读性。它利用了数组是对象,指向数组的变量作为参考。这个没有能手,做我的客人吧。

let nosubmit = (e) => {
  e.preventDefault();
  const f = Array.from(new FormData(e.target));
  const obj = f.reduce((o, [k, v]) => {
    let a = v,
      b, i,
      m = k.split('['),
      n = m[0],
      l = m.length;
    if (l > 1) {
      a = b = o[n] || [];
      for (i = 1; i < l; i++) {
        m[i] = (m[i].split(']')[0] || b.length) * 1;
        b = b[m[i]] = ((i + 1) == l) ? v : b[m[i]] || [];
      }
    }
    return { ...o, [n]: a };
  }, {});
  console.log(obj);
}
document.querySelector('#theform').addEventListener('submit', nosubmit, {capture: true});
<h1>Multilevel Form</h1>
<form action="#" method="POST" enctype="multipart/form-data" id="theform">
  <input type="hidden" name="_id" value="93242" />
  <input type="hidden" name="_fid" value="45c0ec96929bc0d39a904ab5c7af70ef" />
  <label>Select:
    <select name="uselect">
      <option value="A">A</option>
      <option value="B">B</option>
      <option value="C">C</option>
    </select>
  </label>
  <br /><br />
  <label>Checkboxes one level:<br/>
    <input name="c1[]" type="checkbox" checked value="1"/>v1 
    <input name="c1[]" type="checkbox" checked value="2"/>v2
    <input name="c1[]" type="checkbox" checked value="3"/>v3
  </label>
  <br /><br />
  <label>Checkboxes two levels:<br/>
    <input name="c2[0][]" type="checkbox" checked value="4"/>0 v4 
    <input name="c2[0][]" type="checkbox" checked value="5"/>0 v5
    <input name="c2[0][]" type="checkbox" checked value="6"/>0 v6
    <br/>
    <input name="c2[1][]" type="checkbox" checked value="7"/>1 v7 
    <input name="c2[1][]" type="checkbox" checked value="8"/>1 v8
    <input name="c2[1][]" type="checkbox" checked value="9"/>1 v9
  </label>
  <br /><br />
  <label>Radios:
    <input type="radio" name="uradio" value="yes">YES
    <input type="radio" name="uradio" checked value="no">NO
  </label>
  <br /><br />
  <input type="submit" value="Submit" />
</form>

【讨论】:

  • Array.from(fd).reduce((obj, [k, v]) =&gt; ({...obj, [k]: v}), {});hotshot 版本 es2018
  • @nackjicholson 是的,你是对的,省略 .entries() 和 [k,v] 元素简化了代码。我将重写代码以包含这些改进。但是,您的仍然会覆盖重复的值。
  • 虽然我很感激所做的努力 - 这样的代码是荒谬的。没有人愿意看变量和对象的字母,这不是 1985 年。
  • 很好的解决方案,不要听上面的仇恨。
【解决方案8】:

简单易用的功能

我已经创建A Function For This

function FormDataToJSON(FormElement){    
    var formData = new FormData(FormElement);
    var ConvertedJSON= {};
    for (const [key, value]  of formData.entries())
    {
        ConvertedJSON[key] = value;
    }

    return ConvertedJSON
}

使用示例

var ReceivedJSON = FormDataToJSON(document.getElementById('FormId');)

在这段代码中,我使用 for 循环创建了空 JSON 变量,我在每个迭代中使用了从 formData 对象到 JSON 键的 keys。

如果需要改进,请在我的 JS 库中找到此代码

【讨论】:

  • 这不处理&lt;select multiple&gt;或&lt;input type="checkbox"&gt;的多个选定值。
【解决方案9】:

到目前为止,我还没有看到提到过 FormData.getAll 方法。

除了从 FormData 对象中返回与给定键关联的所有值之外,使用此处其他人指定的 Object.fromEntries 方法变得非常简单。

var formData = new FormData(document.forms[0])

var obj = Object.fromEntries(
  Array.from(formData.keys()).map(key => [
    key, formData.getAll(key).length > 1 ? 
      formData.getAll(key) : formData.get(key)
  ])
)

片段在行动

var formData = new FormData(document.forms[0])

var obj = Object.fromEntries(Array.from(formData.keys()).map(key => [key, formData.getAll(key).length > 1 ? formData.getAll(key) : formData.get(key)]))

document.write(`<pre>${JSON.stringify(obj)}</pre>`)
<form action="#">
  <input name="name" value="Robinson" />
  <input name="items" value="Vin" />
  <input name="items" value="Fromage" />
  <select name="animals" multiple id="animals">
    <option value="tiger" selected>Tigre</option>
    <option value="turtle" selected>Tortue</option>
    <option value="monkey">Singe</option>
  </select>
</form>

【讨论】:

    【解决方案10】:

    即使来自@dzuc 的答案已经非常好,您也可以使用数组解构(在现代浏览器或 Babel 中可用)使其更加优雅:

    // original version from @dzuc
    const data = Array.from(formData.entries())
      .reduce((memo, pair) => ({
        ...memo,
        [pair[0]: pair[1],
      }), {})
    
    // with array destructuring
    const data = Array.from(formData.entries())
      .reduce((memo,[key, value]) => ({
        ...memo,
        [key]: value,
      }), {})
    

    【讨论】:

      【解决方案11】:

      如果以下项目满足您的需求,那么您很幸运:

      1. 您希望将数组数组(如 [['key','value1'], ['key2','value2'](如 FormData 提供的))转换为 key->value 对象(如 {key1: 'value1', key2: 'value2'})并将其转换为 JSON 字符串。
      2. 您正在使用最新的 ES6 解释器定位浏览器/设备,或者正在使用 babel 之类的东西进行编译。
      3. 您需要最小的方法来完成此操作。

      这是您需要的代码:

      const data = new FormData(document.querySelector('form'));
      const json = JSON.stringify(Array.from(data).reduce((o,[k,v])=>(o[k]=v,o),{}));
      

      希望这对某人有所帮助。

      【讨论】:

        【解决方案12】:

        我认为这是从formData FormData 对象获得所需结果的最简单方法:

        const jsonData = {};
        
        for(const [key, value] of formData) {
            jsonData[key] = value;
        }
        

        【讨论】:

          【解决方案13】:

          如果您使用 lodash,可以使用 fromPairs 简洁地完成

          import {fromPairs} from 'lodash';
          
          const object = fromPairs(Array.from(formData.entries()));
          

          【讨论】:

          • 不适用于嵌套的 JSON。
          【解决方案14】:

          你可以试试这个

          formDataToJSON($('#form_example'));
          
          # Create a function to convert the serialize and convert the form data
          # to JSON
          # @param : $('#form_example');
          # @return a JSON Stringify
          function formDataToJSON(form) {
              let obj = {};
              let formData = form.serialize();
              let formArray = formData.split("&");
          
              for (inputData of formArray){
                  let dataTmp = inputData.split('=');
                  obj[dataTmp[0]] = dataTmp[1];
              }
              return JSON.stringify(obj);
          }
          

          【讨论】:

            【解决方案15】:

            辱骂单行!

            Array.from(fd).reduce((obj, [k, v]) => ({...obj, [k]: v}), {});
            

            今天我了解到 Firefox 支持对象传播和数组解构!

            【讨论】:

              【解决方案16】:

              如JSON.stringify() 中所述使用toJSON

              如果值有@9​​87654323@方法,它负责定义哪些数据将被序列化。

              这里有一个小技巧。

              var fd = new FormData(document.forms[0]);
              
              fd.toJSON = function() {
                const o = {};
                this.forEach((v, k) => {
                  v = this.getAll(k);
                  o[k] = v.length == 1 ? v[0] : (v.length >= 1 ? v : null);
                });
                return o;
              };
              
              document.write(`<pre>${JSON.stringify(fd)}</pre>`)
              <form action="#">
                <input name="name" value="Robinson" />
                <input name="items" value="Vin" />
                <input name="items" value="Fromage" />
                <select name="animals" multiple id="animals">
                  <option value="tiger" selected>Tigre</option>
                  <option value="turtle" selected>Tortue</option>
                  <option value="monkey">Singe</option>
                </select>
              </form>

              【讨论】:

                【解决方案17】:

                这解决了我的问题,这是一个对象

                const formDataObject = (formData) => {
                
                for (const key in formData) {
                    if (formData[key].startsWith('{') || formData[key].startsWith('[')) {
                        try {
                            formData[key] = JSON.parse(formData[key]);
                            console.log("key is :", key, "form data is :", formData[key]);
                
                        } catch (error) {
                            console.log("error :", key);
                        }
                    }
                }
                
                console.log("object", formData)
                }
                

                【讨论】:

                  【解决方案18】:

                  另一种适用于选择多个或具有相同名称属性的输入的方法:

                  function form_to_json() {
                    const form_data = new FormData(document.querySelector('form'))
                    const uniqueKeys = [...new Set(form_data.keys())]  
                    const obj = {}
                    uniqueKeys.forEach((value, key) => {
                      obj[value] = (form_data.getAll(value).length > 1) ? form_data.getAll(value) : form_data.get(value)
                    })
                    const json = JSON.stringify(obj)
                    alert(json)
                  }
                  <form>
                    <input type="text" name="name" value="Cesar"></br>
                    <select name="cars" id="cars" multiple>
                      <option value="volvo" selected>Volvo</option>
                      <option value="saab" selected>Saab</option>
                    </select>
                    <input type="button" onclick="form_to_json()" value="Ok">
                  </form>

                  【讨论】:

                    【解决方案19】:

                    为我工作

                                    var myForm = document.getElementById("form");
                                    var formData = new FormData(myForm),
                                    obj = {};
                                    for (var entry of formData.entries()){
                                        obj[entry[0]] = entry[1];
                                    }
                                    console.log(obj);
                    

                    【讨论】:

                    • 它不会处理&lt;select multiple&gt;或&lt;input type="checkbox"&gt;的多个选定值
                    【解决方案20】:

                    在我的例子中,数据是数据,火基期待一个对象,但数据包含对象以及所有其他东西,所以我尝试了 data.value 它工作!!!

                    【讨论】:

                      【解决方案21】:

                      我来晚了。但是,我做了一个简单的方法来检查输入 type="checkbox"

                      var formData = new FormData($form.get(0));
                              var objectData = {};
                              formData.forEach(function (value, key) {
                                  var updatedValue = value;
                                  if ($('input[name="' + key + '"]').attr("type") === "checkbox" && $('input[name="' + key + '"]').is(":checked")) {
                                      updatedValue = true; // we don't set false due to it is by default on HTML
                                  }
                                  objectData[key] = updatedValue;
                              });
                      var jsonData = JSON.stringify(objectData);
                      

                      我希望这对其他人有帮助。

                      【讨论】:

                        【解决方案22】:

                        如果你想要 json 字符串:

                        var jsonStr =  JSON.stringify($('#formId').serializeObject());
                        

                        如果你想要一个 json 对象

                        var jsonObj =  JSON.parse(JSON.stringify($('#formId').serializeObject()));
                        

                        【讨论】:

                        • 这需要 jQuery。
                        【解决方案23】:

                        我知道它已经晚了,但这是解决方案;

                        new URLSearchParams(new FormData(formElement)).toString()
                        

                        现在,这可以作为正文发送。遗憾的是,它不是 JSON。

                        【讨论】:

                          【解决方案24】:

                          这是一个将 formData 对象转换为 JSON 字符串的函数。

                          • 适用于多个条目和嵌套数组。
                          • 适用于编号和命名的输入名称数组。

                          例如,您可以有以下表单字段:

                          <select name="select[]" multiple></select>
                          <input name="check[a][0][]" type="checkbox" value="test"/>
                          

                          用法:

                          let json = form2json(formData);
                          

                          功能:

                          form2json(data) {
                                  
                                  let method = function (object,pair) {
                                      
                                      let keys = pair[0].replace(/\]/g,'').split('[');
                                      let key = keys[0];
                                      let value = pair[1];
                                      
                                      if (keys.length > 1) {
                                          
                                          let i,x,segment;
                                          let last = value;
                                          let type = isNaN(keys[1]) ? {} : [];
                                          
                                          value = segment = object[key] || type;
                                          
                                          for (i = 1; i < keys.length; i++) {
                                              
                                              x = keys[i];
                                              
                                              if (i == keys.length-1) {
                                                  if (Array.isArray(segment)) {
                                                      segment.push(last);
                                                  } else {
                                                      segment[x] = last;
                                                  }
                                              } else if (segment[x] == undefined) {
                                                  segment[x] = isNaN(keys[i+1]) ? {} : [];
                                              }
                                              
                                              segment = segment[x];
                                              
                                          }
                                          
                                      }
                                      
                                      object[key] = value;
                                      
                                      return object;
                                      
                                  }
                                  
                                  let object = Array.from(data).reduce(method,{});
                                  
                                  return JSON.stringify(object);
                                  
                              }
                          

                          【讨论】:

                            【解决方案25】:

                            这对我有用。 ? Click here查看详情代码

                            let formToJson = function(){
                                let form = new FormData($("form#formData")[0]);
                                //console.log(form);
                                let jsonData = Object.fromEntries(form.entries());
                                //console.log(jsonData);
                                $("#jsonData").html(JSON.stringify(jsonData));
                            }
                            <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
                            <!DOCTYPE html>
                            <html lang="en">
                            <head>
                                <title>Document</title>
                            </head>
                            <body>
                                <div class="">
                                    <form action="#" method="post" id="formData">
                                        <input type="text" name="fName" id="fName" value="Mad"><br>
                                        <input type="text" name="lName" id="lName" value="Coder"><br>
                                        <input type="button" onclick="formToJson()" value="Boom Yeah">
                                    </form>
                                </div>
                                <div id="jsonData">
                                </div>
                            </body>
                            </html>

                            【讨论】:

                              猜你喜欢
                              • 2017-09-06
                              • 2021-11-25
                              • 1970-01-01
                              • 1970-01-01
                              • 2021-10-08
                              • 2021-05-26
                              • 1970-01-01
                              • 2017-07-29
                              相关资源
                              最近更新 更多