javascript - 将表单数据序列化为 JSON 时如何保留值类型

标签 javascript jquery arrays json forms

我想将所有表单值转换为 JSON,以便我可以在我的 AJAX POST 中将 JSON 作为正文发送。我在网上找到了这个现有的解决方案:

function getFormData($form){
    var unindexed_array = $form.serializeArray();
    var indexed_array = {};

    $.map(unindexed_array, function(n, i){
        indexed_array[n['name']] = n['value'];
    });

    return indexed_array;
}

用法:

var $form = $("#form_data");
var data = getFormData($form);

但是,这种方法 ( source ) 将所有值转换为字符串类型,它不会将数字保留为整数。我想不出一种方法来保留值的类型。执行此操作的最佳方法是什么?

HTML:

<form id="myform">
    <div>
      <label>Number: </label>
      <input id="mynum" type="number" name="mynum"/>
    </div>
    <div>
      <label>name: </label>
      <input id="myname" type="text" name="myname"/>
    </div>
</form>

最佳答案

那是因为所有input 值默认都是string 类型。如果您想将类型转换为 number 类型,您必须手动执行此操作。

一种方法是遍历 JSON 并使用手动函数将 string 值解析回 number 类型。

创建手动函数:http://pietschsoft.com/post/2008/01/14/JavaScript-intTryParse-Equivalent

下面的代码显示即使input类型是number,实际上类型是string:

let type;
function checkFormData(){
  type = document.getElementById('mynum').value;
  console.log('The type of input#mynum is: ' +typeof type);
  return false;
}
<form id="myform" onsubmit=" return checkFormData()">
  <div>
    <label>Number: </label>
    <input id="mynum" type="number" name="mynum"/>
  </div>
  <div>
    <label>name: </label>
    <input id="myname" type="text" name="myname"/>
  </div>
  <input type="submit" value="Submit"/>
</form>

关于javascript - 将表单数据序列化为 JSON 时如何保留值类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47687993/

相关文章:

javascript - Jquery/AJAX 功能不起作用

javascript - Bootstrap JQuery 加载两次 - 导航栏在移动 View 中不会折叠

正则表达式:为什么以逗号开头的逗号分隔字符串?

c++ - C++将数字和逗号的char数组转换为整数列表?

javascript - 创建新对象后,如何防止旧对象丢失?

javascript - 使用 for 循环的冒泡排序无法按预期工作

javascript - jQuery Slide Down 使用 slice 显示更多内容

javascript - removeEventListener、对象和 this

javascript - Firefox 扩展地址栏样式

arrays - 如何创建包含唯一字符串的数组?