2009-04-27 10 views
1

Je suis en train de passer à un script PHP grâce à AJAX:En passant un tableau associatif à travers AJAX pour 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); 

Le PHP est réglé sur print_r($_POST), ce qui est la sortie:

answers [object Object] 

id  3 

Qu'est-ce que j'ai fait de mal?

Edit: Modification du code à utiliser des tableaux, i.e.:

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

donne cette print_r:

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

) 

pensées?

Répondre

3

Vous répétez des answer.x encore et encore afin que vous n'obteniez que le dernier. x est le nom réel de la variable et non la valeur à laquelle vous pensez. Aussi vous avez un double égal sur la ligne "allAnswers". essayez:

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

La 2ème affectation a également un double égal, donc elle n'attribue jamais l'identifiant de réponse. –

+0

Belle prise, fixe, merci. – Brent

+0

Voir mon édition pour la sortie que je reçois de changer les ansers à un tableau –

0

Ah cela a plus de sens; la façon dont vous l'avez formaté précédemment ne correspond pas à l'entrée. Anyhoo, l'objet de réponses est un objet JavaScript; PHP ne sait pas comment le gérer. Je vous suggère d'analyser les éléments individuels avant de passer à PHP, ou d'utiliser json_decode() du côté PHP.

6

Remplacer ceci:

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

Avec ceci:

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

Vous voulez un tableau d'objets, et non un tableau de tableaux.

Questions connexes