2013-12-11 124 views
0

我有一个推荐系统的表单,它有两个字段,分别是姓名和电子邮件。我也有一个'推荐另一个朋友'按钮,允许用户引用另一个朋友(封闭到11)。因此会出现另一个姓名和电子邮件字段现在我还有一个ajax函数$ .post,它被设计成只带一个Name和email。如果有多个电子邮件条目(对于不同的用户可能会有所不同),如何使ajax功能正常工作?我能想到的一件事是在函数addInput()之后使用数组,然后将它传递给ajax。有人可以帮我弄清楚这件事吗?如何通过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> 

回答

3

争取在客户端的JSON数组,并把它传递给作为字符串的服务器像下面一个

[{"name" : "A","email" : "[email protected]"},{"name" : "B","email" : "[email protected]"},{"name" : "C","email" : "[email protected]"}] 

在服务器端使用

json_decode($json) 

会给你

array 
    0 => 
    array 
     'name' => string 'A' (length=1) 
     'email' => string '[email protected]' (length=11) 
    1 => 
    array 
     'name' => string 'B' (length=1) 
     'email' => string '[email protected]' (length=11) 
    2 => 
    array 
     'name' => string 'C' (length=1) 
     'email' => string '[email protected]' (length=11) 

参考

http://php.net/json_decode

0

我认为你可以所有的名字追加到一个字符串分隔在中间 像

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

,现在你可以通过Ajax发送。

并在另一边,你可以将其分割成使用split()功能的阵列

我不熟悉PHP所以原谅我,如果我错了。但这种逻辑其实对我的作品在佳JSP

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); 
} 
0

你可能会使用jQuery .serialize()方法(http://api.jquery.com/serialize/)有更好的运气。另外,您可能想要如下命名输入:

name="name[]"name="email[]"。否则,如果您通过所有发布的输入,则只会传递每个输入的最后一个,因为它们的名称将互相覆盖。