2015-06-13 43 views
3

我的表单包含隐藏的输入循环。 在我的情况下,我手动声明隐藏的Ajax数据输入没有循环。 那么如何循环他们在Ajax数据?通过ajax数据传递循环数据

这里是我的形式脚本

<form method="POST" name="myform"> 
    <?php for($i=1;$i<=5;$i++) { ?> 
      <input type="hidden" name="data<?php echo $i; ?>" value="data<?php echo $i; ?>"> 
    <?php } ?> 
    <input type='button' name='submitData' value='Submit' onClick='submitData();'> 
</form> 

,这里是我的Ajax脚本

function submitData() { 
    var form = document.myform; 
    $.ajax({ 
    url: 'process.php', 
    type: 'post', 
    data: { 
      data1 : form["data1"].value, 
      data2 : form["data2"].value, 
      data3 : form["data3"].value, 
      data4 : form["data4"].value, 
      data5 : form["data5"].value 
    }, 
    success: function (result) { 
      console.log(result); 
    }, 
    error: function() { 
      console.log("error"); 
    } 
    }); 
} 

回答

3

你的隐藏输入有名称和值,

使用.serialize()

编码组表单元素为一个字符串提交

data : $('form[name=myform]').serialize() 

这将返回name=value双。

如果需要{name:value},使用.each()

var formData = {} 
$('form :input:hidden[name^="data"]').each(function(){ 
    formData[this.name] = this.value; 
}); 

而在阿贾克斯,

data : formData , 

Demo

+0

我认为它应该是$('form:input [type =“hidden”]') –

+0

没有原因? http://jsfiddle.net/vo218gcu/ –

+0

原因是http://jsfiddle.net/vo218gcu/1/ ..取决于OP代码 –

2

如果要发布整个表格,您可以使用jQuery的.serialize()直接在您的要求:

$.ajax({ 
    url: 'process.php', 
    type: 'post', 
    data: $('#myform').serialize(), 
... 
1

而且,一个好办法做到这一点是将字符串转换成JSON对象,并在PHP转换字符串数组:

var dataJSON = JSON.stringify({..Your form obj...}); 

$.ajax({ 
    url: 'process.php', 
    type: 'post', 
    data: dataJSON, 
    success: function (result) { 
      console.log(result); 
    }, 
    error: function() { 
      console.log("error"); 
    } 
}); 

process.php

$data = json_decode($_POST["data"]); 
print_r($data);