2009-04-27 16 views
1

にAJAXを通じて連想配列を渡す:私はAJAXを通じてPHPスクリプトにこれを渡すためにしようとしている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

あなたはanswer.xを何度も再宣言しているので、最後のものだけを取得します。 xは実際の変数名であり、あなたが考えている値ではありません。また、 "allAnswers"の行には2つの等しいものがあります。試してください:あなたがオブジェクトの配列ではなく、配列の配列をしたい

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

:これにより

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 ]=new Array(); 
     answers[ x ]['id'] = allAnswers[x]['id']; 
     answers[ x ]['val'] = $("#field_" + x).val(); 
    } 
+1

2番目の割り当てにも2つの等しい値があるため、決して答えIDを割り当てません。 –

+0

いいキャッチ、固定、ありがとう。 – Brent

+0

ansersを配列に変更して出力を編集する –

0

ああ、それは理にかなっています。それ以前に書式を設定した方法と入力が一致しませんでした。

Anyhooでは、answersオブジェクトはJavaScriptオブジェクトです。 PHPはそれをどのように処理するのか分かりません。 PHPに渡す前に個々の項目を解析するか、PHP側でjson_decode()を使用することをお勧めします。

6

はこれを交換してください。

関連する問題