web-dev-qa-db-ja.com

Javascript配列を渡す-> PHP

一連の要素(50〜200の任意の場所)を持つjavascript配列があるとします。

これをajaxを使用してPHP(準備済みステートメント)に送信します。現在、私は.loadループ内で何度もphpファイルを作成しますが、それを配列に変換し、配列を1回送信して、50-200回ではなくPHPファイルを1回ロードします。

array[i] = variable;

59
switz

JSON.stringify(array)を使用してJavaScriptで配列をエンコードしてから、PHP)スクリプトで$array=json_decode($_POST['jsondata']);を使用して取得できます。

101
Gareth

AJAXリクエストはGETおよびPOST <form>要素。つまり、$ _ GETと$ _POSTを使用してデータを取得できます。

AJAXリクエスト(jQueryの例)を作成する場合:

// JavaScript file

elements = [1, 2, 9, 15].join(',')
$.post('/test.php', {elements: elements})

このフォームを投稿することと(ほぼ)同等です:

<form action="/test.php" method="post">
  <input type="text" name="elements" value="1,2,9,15">
</form>

どちらの場合でも、サーバー側では、$ _ POST変数からデータを読み取ることができます。

// test.php file

$elements = $_POST['elements'];
$elements = explode(',', $elements);

簡単にするために、ここでは要素をコンマで結合しています。ただし、JSONシリアル化はより普遍的なソリューションです。

28
Alexey Lebedev

次に、js配列またはオブジェクトをphp互換配列に変換して、http getリクエストパラメーターとして送信する関数を示します。

function obj2url(prefix, obj) {
        var args=new Array();
        if(typeof(obj) == 'object'){
            for(var i in obj)
                args[args.length]=any2url(prefix+'['+encodeURIComponent(i)+']', obj[i]);
        }
        else
            args[args.length]=prefix+'='+encodeURIComponent(obj);
        return args.join('&');
    }

prefixはパラメータ名です。

編集:

var a = {
    one: two,
    three: four
};

alert('/script.php?'+obj2url('a', a)); 

生産します

/script.php?a[one]=two&a[three]=four

script.phpで配列として$ _GET ['a']を使用できるようになります。 jsからscript.phpを呼び出すためのURLを提供する際に、お気に入りのajaxエンジンへの道を考える必要があります。

2