jQuery如何发布特定的值数组

时间:2018-08-30 12:09:05

标签: javascript jquery arrays serialization

这是动态输入形式

<form role="form" method="post" id="form1">

<input type='text' id='shipping' name='shipping[3]'>
<input type='text' id='payment' name='payment[3]'>
<input type='text' id='address' name='address[3]'>

<input type='text' id='shipping' name='shipping[4]'>
<input type='text' id='payment' name='payment[4]'>
<input type='text' id='address' name='address[4]'>

<input type='text' id='option' name='option'>
</form>

然后我的javascript(jQuery)将此表单发布到PHP服务器端

    $.post("phpfile", $('#form1').serialize(),
    function (data) {
    }
);

如果使用serialize();它将以输入形式发布所有数据 示例:

option: exampledata
shipping[4]: exampledata
payment[4]: exampledata
address[4]: exampledata
shipping[3]: exampledata
payment[3]: exampledata
address[3]: exampledata

我只想发布诸如货运地址之类的特定数据,而不是付款?有什么办法吗?

shipping[4]: exampledata
address[4]: exampledata
shipping[3]: exampledata
address[3]: exampledata

3 个答案:

答案 0 :(得分:0)

在这种情况下,为什么要压缩输入内容?您可以使用POST-PARAMETER将数组和对象从javascript传递到php,而无需修改对象/数组。

var postArray = ["test1", "test2", "test3"];
jQuery.post("index.php", {arrData: postArray }, function(data){

    console.log(data);

});

您可以使用$_POST["arrData"]

通过PHP轻松获取数组

答案 1 :(得分:0)

以下是您的答案

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

</head>
<body>

<form role="form" method="post" id="form1">

<input type='text' id='shipping' name='shipping'>
<input type='text' id='payment' name='payment[3]'>
<input type='text' id='address' name='address[3]'>

<input type='text' id='shipping' name='shipping[4]'>
<input type='text' id='payment' name='payment[4]'>
<input type='text' id='address' name='address[4]'>

<input type='text' id='option' name='option'>
<input type='submit' id='submit' name='submit'>
</form>
<script>
$('#form1').submit(function(e){
   e.preventDefault();

   var formData = {};
   formData.shipping = $('#shipping').val();
    $.ajax({
      type: "POST",
      url: "your-server-file-name.php",
      data: formData,
      success: function(response){},
      error:function(error){}
    });

});
</script>
</body>
</html>

需要记住的几点

  1. 为什么要使用name ='payment [3]',name ='address [3]'等来命名?这种类型的名称用于多选元素。
  2. 您尚未添加提交按钮或任何代码来提交表单。应该在那里提交表单(就像我添加的一样)。

注意:我仅处理运输。您可以添加要发送的所有其他元素。

答案 2 :(得分:0)

我要做的是声明一个数组,然后使用^=运算符,该运算符将查找具有该名称的每个元素。然后,我将使用.each()函数创建一个循环,该循环以元素的数量进行迭代。然后可以将值.push()放入声明的数组中。然后,我遍历我的另一个文件中的数组,将数据发送到您命名的“ phpfile”

示例:

var shippingArray = [];

$('input[name^="shipping"]').each(function() {
    shippingArray.push( $(this).val() );
});

var addressArray = [];

$('input[name^="address"]').each(function() {
    addressArray.push( $(this).val() );
});

您现在有了2个完美的数组变量,可以将它们解析为所需的任何文件。我建议您研究一下jQuery AJAX。

因此在文件中,“ phpfile”

$shippingArray=$_POST['shippingArray'];
$shippingValues=array_values($shippingArray);

$addressArray=$_POST['addressArray'];
$addressValues=array_values($addressArray);

$i=0;
$length=count($shippingArray);

while($i < $length) {
    $i++;
    $arrayValue=$shippingArray[$i];

   //Do something with the value
}

$i=0;
$length=count($addressArray);

while($i < $length) {
    $i++;
    $arrayValue=$addressArray[$i];

   //Do something with the value
}