什么是正确的表单语法和相关的jquery来获取json数组

时间:2017-06-25 06:44:25

标签: php jquery html arrays json

我知道json应该是怎样的。它是一个包含元素(A,B,C)的数组,每个元素在数组中有4个不同的值。

{
"A":["157","219","",""],
"B":["157","576","",""],
"C":["654","341","",""]
}

尝试解决方案1:

jQuery(document).on('click', '#btn_save', function(){
    var data = jQuery('#hetfo_form').serialize();
    console.log(data);
});


<button type="button" id="#btn_save"></button>

是的,我不提交带有提交事件的表单,但是当我点击表格外的按钮时,请阅读表格的内容。

<form id="hetfo_form" action="#" method="post">
<select class="form-control" name="A[]">
        <option value="2">......</option>
        <option value="3">......</option>
        ...
</select>
<select class="form-control" name="A[]">
        <option value="2">......</option>
        <option value="3">......</option>
        ...
</select>

<select class="form-control" name="B[]">
        <option value="2">......</option>
        <option value="3">......</option>
        ...
</select>
<select class="form-control" name="B[]">
        <option value="2">......</option>
        <option value="3">......</option>
        ...
</select>

<select class="form-control" name="C[]">
        <option value="2">......</option>
        <option value="3">......</option>
        ...
</select>
<select class="form-control" name="C[]">
        <option value="2">......</option>
        <option value="3">......</option>
        ...
</select>

</form>

控制台上面代码的结果如下所示: A%5B%5D = 2及A%5B%5D =安培; A%5B%5D = 40&安培; A%5B%5D = 775&安培; A%5B%5D = 3及A%5B%5D =安培; A%5B%5D =安培; A%5B%5D =安培; A%5B%5D =安培; A%5B%5D =安培; A%5 B%5D =安培; A%5B%5D = < / p>

看起来我甚至写了select name =“C []”它不被识别为数组C而是一个名为C []的变量。括号“[”“]”作为常规字符串处理。

如果我使用serializeArray(),结果是: serializeArray result

尝试过解决方案2: 我也尝试创建这个函数:

 function ConvertFormToJSON(form){
     var array = jQuery(form).serializeArray();
     var json = {};

     jQuery.each(array, function() {
         json[this.name] = this.value || '';
     });

     return json;
 }

然后为数据变量分配返回值:

  jQuery(document).on('click', '#btn_save', function(){
    var data =ConvertFormToJSON('#hetfo_form');
    console.log(data);
 });

The result on console

尝试过解决方案3:

 var data =JSON.stringify(jQuery('#hetfo_form').serializeArray());

控制台上的结果: [{ “名称”: “ 'A []'”, “值”: “2”},{ “名称”: “ 'A []'”, “值”: “10”},{ “名称”: “ 'A []'”, “值”: “40”},{ “名称”: “ 'A []'”, “值”: “”},{ “名称”: “ 'B []'” “值”: “4”},{ “名称”: “ 'B []'”, “值”: “8”},{ “名称”: “ 'B []'”, “值”:” “},{” 名称 “:” 'B []'”, “值”: “”},{ “名称”: “ 'C []'”, “值”: “64”},{ “名” : “ 'C []'”, “值”: “26”},{ “名称”: “ 'C []'”, “值”: “”},{ “名称”:“ 'C []' ”, “值”: “”}]

我做错了什么?获取请求的json结果的正确html和jquery代码是什么? 我不想刷新整个页面,只是获取请求的结果并使用console.log()显示它。 谢谢

2 个答案:

答案 0 :(得分:0)

json_string = $('your_form').serialize();

您可以在此处找到更多信息 - jquery documentation

答案 1 :(得分:0)

你可以尝试:

1)关于数组键:如果你需要它们,你可以使用PHP(for,foreach)生成数组的键,因为javascript不会以这种方式生成整数键(对于PHP,它们是由生成的默认来自PHP命名约定):

$fields = 3;

for($n=0; $n<$fields; $n++)
{
   echo '<select class="form-control" name="A['.$n.']">';
   echo '</select>';
}

2)在与表单控件同名的情况下使用javascript处理数据:

var myForm = document.forms.hetfo_form;
var myData_a = myForm.elements['A[]'];
for (var i = 0; i < myData_a .length; i++) {
    var aData = myData_a [i];
}