web-dev-qa-db-ja.com

JavascriptオブジェクトをAjax経由でPHPに送信する

私は失敗によってAjaxを学んでおり、壁にぶつかった:

Javascriptで記述された配列(重要な場合、配列はユーザ​​ーがチェックするチェックボックスに基づいて番号IDを格納しています)を持っています。

ユーザーが「保存」ボタンをクリックすると呼び出される関数があります。機能は次のとおりです。

function createAmenities() {
    if (window.XMLHttpRequest) {
        //code for IE7+, Firefox, Chrome and Opera
        xmlhttp = new XMLHttpRequest();
    }
    else {
        //code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById('message').innerHTML = xmlhttp.responseText;
        }
    }

    var url = "create_amenities.php";

    xmlhttp.open("GET", url, true);

    xmlhttp.send();

}

私の質問は:この関数に何を入れて、私が呼び出しようとしているPHPスクリプトに配列をプルすることができますか( 'create_amenities.php')?

さらに、JSONを使用してみてください。もしそうなら、どのようにajax経由でJSONオブジェクトを送信できますか?

前もって感謝します。

21
Eric T

配列に複数の次元がある場合、または連想配列の場合は、JSONを使用する必要があります。

Jsonは完全な配列構造を文字列に変換します。この文字列は、PHPアプリケーションに簡単に送信して、PHP配列に戻すことができます。

Jsonの詳細: http://www.json.org/js.html

var my_array = { ... };
var json = JSON.stringify( my_array );

PHPでは、json_decodeを使用して文字列をデコードできます。

http://www.php.net/manual/en/function.json-decode.php

var_dump(json_decode($json));
50
jantimon

配列をループし、毎回クエリ文字列にencodeURIComponent('keyname[]') + '=' + encodeURIComponent(theArray[i]) + '&'を追加します。

さらに、JSONを使用してみてください。

可能ですが、通常のフォーム処理で処理するのではなく、反対側でJSONをデコードすることを意味します。

もしそうなら、どのようにajax経由でJSONオブジェクトを送信できますか?

JSONオブジェクトのようなものはありません があります。 JSONは文字列の形式を取り、クエリ文字列に文字列を含めることができます(encodeURIComponentを忘れないでください)。

1
Quentin