2009-04-27 121 views
1

我試圖通過AJAX這個傳遞給PHP腳本:通過AJAX傳遞關聯數組PHP

var answers={}; 
    for (x=0; x< allAnswers.length; x++) 
    { 
     answers.x=new Array(); 
     answers.x['id']==allAnswers[x]['id']; 
     answers.x['val']=$("#field_" + x).val(); 
    } 

    var data={}; 
    data.id=questions[qId]['id']; 
    data['answers']=answers; 

    $.post('index.php',data); 

的PHP設置爲print_r($_POST),這是輸出:

answers [object Object] 

id  3 

我做錯了什麼?

編輯:更改使用數組的代碼,即:

var answers=new Array(); 
    for (x=0; x< allAnswers.length; x++) 
    { 
     answers[x]=new Array(); 
     answers[x]['id']=allAnswers[x]['id']; 
     answers[x]['val']=$("#field_" + x).val(); 
    } 
    var data={}; 
    data.id=questions[qId]['id']; 
    data['answers[]']=answers; 

    $.post('index.php',data); 

給出了這樣的print_r:

Array 
(
    [id] => 3 
    [answers] => Array 
     (
      [0] => 
      [1] => 
     ) 

) 

的思考?

回答

3

你重新宣佈answers.x一遍又一遍,所以你只會得到最後一個。 x是實際的變量名稱,而不是您想要的值。在「allAnswers」系列中也有兩個相同的值。嘗試:

var answers = new Array(); 
for (x=0; x< allAnswers.length; x++) 
    { 
     answers[ x ]=new Array(); 
     answers[ x ]['id'] = allAnswers[x]['id']; 
     answers[ x ]['val'] = $("#field_" + x).val(); 
    } 
+1

第二個任務也有一個雙等於,所以它從來沒有分配答案ID。 – 2009-04-27 00:38:46

0

啊,這更有意義;您之前格式化的方式與輸入不匹配。

Anyhoo,答案對象是一個JavaScript對象; PHP不知道如何處理它。我建議你在傳遞給PHP之前解析出各個項目,或者在PHP端使用json_decode()。

6

替換此:

var answers=new Array(); 
for (x=0; x< allAnswers.length; x++) { 
    answers[x]=new Array(); 
    answers[x]['id']=allAnswers[x]['id']; 
    answers[x]['val']=$("#field_" + x).val(); 
} 

有了這個:

var answers = new Array(); 
for (x=0; x< allAnswers.length; x++) { 
    answers[x] = {}; 
    answers[x]['id']=allAnswers[x]['id']; 
    answers[x]['val']=$("#field_" + x).val(); 
} 

你想對象的數組,而不是數組的數組。