web-dev-qa-db-ja.com

jQuery $ .ajaxを介してJavaScript配列をPHPに渡す

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'];

これを試してもスクリプトが完了しない...どうすれば修正できますか?

77
krx
data: { activitiesArray: activities },

それでおしまい!これで、PHPでアクセスできます。

<?php $myArray = $_REQUEST['activitiesArray']; ?>
145
Valentin Golev

配列を送信する前にJSONとしてエンコードするか、反対側で迷惑メールを受け取る必要があります。

送信するのは配列だけなので、次のようにできます。

data: { activities: activities }

配列が自動的に変換されます。

詳細については、 here をご覧ください。

11
jvenema

これを文字列に変換する必要があります。 JSON2ライブラリのstringifyメソッドを使用してこれを行うことができます。

http://www.json.org/

http://www.json.org/js.html

コードは次のようになります。

var myJSONText = JSON.stringify(myObject);

そう

['Location Zero', 'Location One', 'Location Two'];

となります:

"['Location Zero', 'Location One', 'Location Two']"

サーバーでこれを処理する方法については、PHP達人を参照する必要があります。ここでの他の答えは、解決策と密接に関係していると思います。

同様の方法でサーバーからデータを返すことができます。つまりオブジェクトに戻すことができます。

var myObject = JSON.parse(myJSONString);
10
James Wiseman

これに答えるには遅すぎるかもしれないことは知っていますが、これは私にとって素晴らしい方法で働きました:

  1. var st = JSON.stringify(your_object);でJavaScriptオブジェクト(json)を文字列化します

  2. POSTデータを「string」として渡します(jQueryを使用する場合:$.post('foo.php',{data:st},function(data){... });

  3. サーバー側の処理でデータをデコードします:$data = json_decode($_POST['data']);

それだけです...データを自由に使用できます。

多次元配列および単一配列は、通常の配列として処理されます。それらにアクセスするには、通常の$foo[4]を実行します。

連想配列(javsacriptオブジェクト)は、phpオブジェクト(クラス)として処理されます。それらにアクセスするには、クラス[$foo->bar]のようにします。

9
lu1s

私はこのようにする必要があります:

$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer },
  function(response, status, xhr) {
    alert("POST returned: \n" + response + "\n\n");
  })
2
masterdany88

これは私のために働いた:

$.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;
}
1
I.Tyger

目的の変数名に配列オペランドを追加する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';
1
chelista

JQuery Serialize関数を使用する

http://docs.jquery.com/Ajax/serialize

シリアル化は通常、サーバーにポストされるユーザー入力データを準備するために使用されます。シリアル化されたデータは、ほぼすべてのサーバー側プログラミング言語と互換性およびフレームワークである標準形式です。

1
Gazzer

これは、PHPが値を文字列として読み取るためです。データをオブジェクトとして渡したくない場合は(前の回答でも同様ですが)、PHPで次のようにします。

 $activitiesString = $_POST['activitiesArray'];
 $activitiesArray = (explode(",",$activitiesString));

最後の行では、コンマごとに文字列をビットに分割しています。現在、$ activitiesArrayも配列です。コンマがない場合でも機能します(javascript配列内の1つの要素のみ)。

ハッピーコーディング!

0
Hawthorn