如何通过ajax传递数组?

时间:2013-12-11 05:17:49

标签: php jquery html ajax

我有一个推荐系统的表单,它有两个字段,即姓名和电子邮件。我还有一个“推荐另一个朋友”按钮,允许用户推荐另一个朋友(上限为11)。因此出现另一个名称和电子邮件字段现在我还有一个ajax函数$ .post,它只能用一个名字和电子邮件。如果有多个电子邮件条目(对于不同的用户可能不同),如何使ajax功能正常工作。我能想到的一件事是在函数addInput()之后使用数组,然后将其传递给ajax。有人能帮我解决这个问题吗?

    <script>
var countBox =1;
var boxName = 0;
function addInput()
{
     if(countBox<20)
     {  
     var boxName="textBox"+countBox; 
document.getElementById('responce').innerHTML+='<input name="name" size="50" class="resize" placeholder="&nbsp;&nbsp;Name" required type="text" id="'+boxName+'" value="'+'" "  />';
     countBox += 1;
     var boxName="textBox"+countBox; 
document.getElementById('responce').innerHTML+='<br/><input name="email" size="50" class="resize" required placeholder="&nbsp;&nbsp;Email Address" type="text" id="'+boxName+'" value="'+'" "  /><br/><br/>';
     countBox += 1;
     }
     else{
         alert("Max number of referrals reached");
         }
}
</script>

<script src="js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="js/jquery.validate.min.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $('#emailForm').validate({
            submitHandler: function() {
                $.post("index1.php",{"name":$('#name').val(),"email":$('#email').val(),"userid": "<?php echo($user) ?>"},function(data) {

                    if(data == "Email address has already received a referral")
                        alert("Email address has already received a referral");
                    else {
                        count = 3 - parseInt(data)
                        var content = "You have "+count+" referrals left";
                        $('h4').html(content);
                        alert ("Referral sent");
                    }
                });
            }
            });
    });

</script>

4 个答案:

答案 0 :(得分:3)

尝试在客户端创建json数组,并将其作为字符串传递给服务器,如下面的

   [{"name" : "A","email" : "a@gmail.com"},{"name" : "B","email" : "b@gmail.com"},{"name" : "C","email" : "c@gmail.com"}]

在服务器端使用

json_decode($json)

会给你

  array
  0 => 
    array
      'name' => string 'A' (length=1)
      'email' => string 'a@gmail.com' (length=11)
  1 => 
    array
      'name' => string 'B' (length=1)
      'email' => string 'b@gmail.com' (length=11)
  2 => 
    array
      'name' => string 'C' (length=1)
      'email' => string 'c@gmail.com' (length=11)

参考

http://php.net/json_decode

答案 1 :(得分:0)

我认为您可以将所有名称附加到单个字符串中,并在中间添加分隔符 像

name=name1+","+name2;
email=email1+","+email2;

现在你可以通过ajax发送它。

另一方面,您可以使用split()函数

将其拆分为数组

我不熟悉PHP,请原谅我,如果我错了。但是这个逻辑在JSP中实际上对我有用

答案 2 :(得分:0)

你做

<input name="name[]">

<input name="email[]">

看起来你需要

<input type="hidden" name="userid" value="<?php echo($user) ?>">

然后,您可以使用

 $.post("index1.php", $('#emailForm').serialize());

然后,在你的php中,你只需要遍历你的帖子变量:

for ($i=0; $i < count($_POST['email']); $i++) {
  $email = $_POST['email'][$i];
  $name = $_POST['name'][$i];
  doStuff($name, $email);
}

答案 3 :(得分:0)

使用jQuery .serialize()方法(http://api.jquery.com/serialize/)可能会更好。此外,您可能希望将输入命名为:

name="name[]"name="email[]"。否则,如果你传递了所有发布的输入,你只会传递最后一个,因为他们的名字会相互覆盖。