2013-12-11 3 views
0

나는 이름과 이메일이라는 두 개의 필드가있는 추천 시스템을위한 양식이 있습니다. 나는 또한 '다른 친구에게 추천하기'버튼이있어서 사용자가 다른 친구를 추천 할 수있다. 그래서 다른 이름과 이메일 필드가 나타납니다. 이제는 하나의 이름과 전자 메일 만 가져 오도록 설계된 ajax 함수 $ .post가 있습니다. 둘 이상의 전자 메일 항목이있는 경우 (다른 사용자마다 다를 수 있음) Ajax 기능을 제대로 작동하게하려면 어떻게해야합니까? 내가 생각할 수있는 한 가지는 addInput() 함수 다음에 배열을 사용하고 아약스에 전달하는 것이다. 누군가 내가 이걸 알아 내도록 도울 수 있습니까?아약스를 통해 배열을 전달하는 방법은 무엇입니까?

<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; 

처럼 중간 에서 분리하여 하나의 문자열로 모든 이름을 추가 할 수 있습니다 생각하고 지금은 아약스를 통해 보낼 수 있습니다.

및 기타 측면에

당신은

내가 만약 내가 잘못 그래서 실례 PHP에 익숙하지 않은 오전 split() 기능을 사용하여 배열로 분할 할 수 있습니다. 그러나이 논리는 사실, 당신은

<input name="name[]"> 

<input name="email[]"> 

을하고

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

다음 있어야합니다 것 같습니다 JSP

0

에 나를 위해 좋은 작동 사용할 수 있습니다

$.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[]"과 같이 지정할 수도 있습니다. 그렇지 않으면 게시 된 모든 입력을 전달하면 이름이 서로 겹쳐 쓰이므로 마지막 입력 만 전달합니다.

관련 문제