2012-03-30 7 views
6

ここで真剣に苦労しています。私は多次元配列をPHPにajax経由で送信しようとするといくつかの問題を抱えています。ajaxからPHPへの多次元配列

を簡素化するのではなく、コードの壁をコピー&ペーストするには:

peoplearray[0] = [name] => 'john' 
         [age] => '28' 
         [sex] => 'Male' 
    peoplearray[1] = [name] => 'julie' 
         [age] => '20' 
         [sex] => 'Female' 

    main_array['item'] = 'x'; 
    main_array['something'] = 'x'; 
    main_array['another'] = 'x'; 

私はこれがpost経由でPHPに取得したいここでは、私がしようとしているものです。今、次のPHPで

// var data = JSON.stringify(main_array); 

var send = $.ajax({ 
     type: "POST", 
     cache: false, 
     url: "theurl", 
     data: {data:main_array} //I do change this `main_array` when using the above stringify! 
}); 


send.done(function(msg) { 
console.log(msg); 
}) 

私はやっている:

main_array['peoplearray'] = peoplearray; 

は、AJAXを行うために:私は、多次元とにかくこれだと私は一緒にちょうどそれらを結合aswellて考え出し放火犯で

$data= $_POST['data']; 
print_r($data); 

(an empty string)

私はvar data = JSON.stringify(main_array);を持っていますコメントのない私は、次を得る:[][

私は私が手PHPに$data = json_decode($_POST['data']);を追加した場合:

Array () 

基本的に私が気付いmain_arrayは配列である必要はありませんので、私は何の問題を越えているものを得ることができますしかし、私がする必要があるのは、peoplearrayを手に入れて、foreachなどをPHPで実行できるようにすることです。どんな助けでも大歓迎です。私はただ愚かであると確信しています!

EDIT:peoplearrayは0または100のエントリを持つことができるので、PHP入力にする必要があります。foreach DB入力を行うことができます。より良いアプローチがあれば、私はまだそれがかなり新しいので、それを聞いて非常に感謝しています。

編集:Nicolaのおかげで、mainarry.peoplearrayという重要な部分を除いて、すべてが正常に処理されています。戻り値console.logには表示されず、PHPでアクセスできません。これについての解決策、またはjavascriptにforeachインテリジェンスを入れて、すべてを個別に送信する必要がありますか? JavaScriptで何の連想配列が存在しないとこのような理由のために

main_array['peoplearray'] = peoplearray; 

main_array.peoplearray = peoplearray; 

に相当し、あなたのようmain_array宣言する必要があるため、すべてのmain_array

+1

ajaxリクエストを行うJS関数全体を投稿できますか? console.log(main_array)を使用している場合($ .ajaxを呼び出す前に)、Firebugには何が表示されますか? –

+0

JSON.stringifyの前にconsole.log(main_array)で正しい結果が得られました。私はJSON.stringifyの後に:[]。私が現在しているすべてのアヤックスまで。実際にはそれは唯一の真のコピー&ペーストです!ちょうどこの点に到達するために私は永遠にChromeで配列をデバッグしています。 – Zac

答えて

1

私はpeoplearray別々に保つことで動作するようにそれを得ました。

私はニコラが言ったように、mainarrayをオブジェクトとして作成しました。カーリーと宣言:私は、オブジェクトすなわちとして作成name,age&sexフィールドしかし、その後、[]と宣言、つまり配列として残さ{}

peoplearray。 {}をクリックし、.push()peoplearrayに入力します。

次に、以下のようアヤックスが見えた:

var send = $.ajax({ 
     type: "POST", 
     dataType: "json", 
     cache: false, 
     url: "theurl", 
     data: {data:main_array, people:peoplearray} 
}); 

その後、PHPのすべてが$ _POSTで利用可能で、あなた

echo json_encode($people); //or whatever var name it is stored as in the php 

場合、オブジェクトはname,age,sexプロパティが

に示されている。すなわちで
send.done(function(msg) { 
console.log(msg); 
}) 
+0

これはtoghetherを保つことによってもうまくいきましたが、それは良い解決策です。 –

+0

何か理由のために、私がオブジェクトの中に配列を持っていた場合、投稿と戻り値の両方がnullとして表示されました。それらを分割し、それぞれの「人」が 'peoplearray'の中のオブジェクトであることを確認してください。あなたの助けに多くのおかげでニコラ。 – Zac

7

まず、配列が、オブジェクトではありませんこの

var main_array = {}; 

あなたのfunctioを変更しようとします。このようなN:

var send = $.ajax({ 
     type: "POST", 
     dataType: "json", 
     cache: false, 
     url: "theurl", 
     data: {data:main_array} 
}); 

とサーバ側

​​
+0

まず、答えに感謝します。私は記入する必要があるオブジェクト/配列の基本的な理解が失われていることを理解しています。これは素晴らしいですが、返されたオブジェクトの前に表示されているにもかかわらず、どのように私はPHP側の各プロパティにアクセスするのですか? – Zac