PHPでJavaScript配列を操作したい。このようなことをすることは可能ですか?
$.ajax({
type: "POST",
url: "tourFinderFunctions.php",
data: "activitiesArray="+activities,
success: function() {
$("#lengthQuestion").fadeOut('slow');
}
});
アクティビティは、次のような1次元配列です。
var activities = ['Location Zero', 'Location One', 'Location Two'];
これを試してもスクリプトが完了しない...どうすれば修正できますか?
data: { activitiesArray: activities },
それでおしまい!これで、PHPでアクセスできます。
<?php $myArray = $_REQUEST['activitiesArray']; ?>
配列を送信する前にJSONとしてエンコードするか、反対側で迷惑メールを受け取る必要があります。
送信するのは配列だけなので、次のようにできます。
data: { activities: activities }
配列が自動的に変換されます。
詳細については、 here をご覧ください。
これを文字列に変換する必要があります。 JSON2ライブラリのstringifyメソッドを使用してこれを行うことができます。
コードは次のようになります。
var myJSONText = JSON.stringify(myObject);
そう
['Location Zero', 'Location One', 'Location Two'];
となります:
"['Location Zero', 'Location One', 'Location Two']"
サーバーでこれを処理する方法については、PHP達人を参照する必要があります。ここでの他の答えは、解決策と密接に関係していると思います。
同様の方法でサーバーからデータを返すことができます。つまりオブジェクトに戻すことができます。
var myObject = JSON.parse(myJSONString);
これに答えるには遅すぎるかもしれないことは知っていますが、これは私にとって素晴らしい方法で働きました:
var st = JSON.stringify(your_object);
でJavaScriptオブジェクト(json)を文字列化します
POSTデータを「string」として渡します(jQueryを使用する場合:$.post('foo.php',{data:st},function(data){... });
$data = json_decode($_POST['data']);
それだけです...データを自由に使用できます。
多次元配列および単一配列は、通常の配列として処理されます。それらにアクセスするには、通常の$foo[4]
を実行します。
連想配列(javsacriptオブジェクト)は、phpオブジェクト(クラス)として処理されます。それらにアクセスするには、クラス[$foo->bar
]のようにします。
私はこのようにする必要があります:
$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer },
function(response, status, xhr) {
alert("POST returned: \n" + response + "\n\n");
})
これは私のために働いた:
$.ajax({
url:"../messaging/delete.php",
type:"POST",
data:{messages:selected},
success:function(data){
if(data === "done"){
}
info($("#notification"), data);
},
beforeSend:function(){
info($("#notification"),"Deleting "+count+" messages");
},
error:function(jqXHR, textStatus, errorMessage){
error($("#notification"),errorMessage);
}
});
そしてこれはPHPの場合:
$messages = $_POST['messages']
foreach($messages as $msg){
echo $msg;
}
目的の変数名に配列オペランドを追加するPHP組み込み機能を使用します。
次のようにJavascript配列に値を追加する場合:
acitivies.Push('Location Zero');
acitivies.Push('Location One');
acitivies.Push('Location Two');
次のようにサーバーに送信できます。
$.ajax({
type: 'POST',
url: 'tourFinderFunctions.php',
'activities[]': activities
success: function() {
$('#lengthQuestion').fadeOut('slow');
}
});
アクティビティを囲む引用符に注目してください。値は次のように使用できます。
$_POST['activities'][0] == 'Location Zero';
$_POST['activities'][1] == 'Location One';
$_POST['activities'][2] == 'Location Two';
JQuery Serialize関数を使用する
http://docs.jquery.com/Ajax/serialize
シリアル化は通常、サーバーにポストされるユーザー入力データを準備するために使用されます。シリアル化されたデータは、ほぼすべてのサーバー側プログラミング言語と互換性およびフレームワークである標準形式です。
これは、PHPが値を文字列として読み取るためです。データをオブジェクトとして渡したくない場合は(前の回答でも同様ですが)、PHPで次のようにします。
$activitiesString = $_POST['activitiesArray'];
$activitiesArray = (explode(",",$activitiesString));
最後の行では、コンマごとに文字列をビットに分割しています。現在、$ activitiesArrayも配列です。コンマがない場合でも機能します(javascript配列内の1つの要素のみ)。
ハッピーコーディング!