1

data: を json データに設定する標準の javascript ajax 呼び出しがあります。

$.ajax({
    type: "POST",
    url: BaseUrl + "User/Login",    
    //url: BaseUrl + "User/Limit/1/2",
    data: '{"apiKey":"c7089786-7e3a-462c-a620-d85031f0c826","appIDGiven":"200","userName":"matt2","password":"pass"}',
    success: function(data){
        console.log(data);
    },
    error: function(request){
        console.log(request);
    },
});

PHPでデータを取得しようとしましたが、うまくいき$_POST["data"]ません。
ただし、data: 'test={"apiKey":"c7089786-7e3a-462c-a620-d85031f0c826","appIDGiven":"200","userName":"matt2","password":"pass"}'動作します。

おそらく私のフレームワークか、そのようなものが$_POST["data"]動作を妨げているのでしょうか、それともまったく不可能なのでしょうか? または、そのデータを取得するために使用できるものは他にありますか?

編集:

したがって、フレームワーク YII と拡張機能 Restfullyii には、1 行を使用してデータを取得するメソッドがあります return json_decode(file_get_contents("php://input"), true);

data= または {data: を必要とせずにすべてのデータを取得していますが、配列を返しているように見えるので、$data["userName"] のようなプロパティにアクセスしています。ここで、真の json オブジェクトは $data->[" である必要があります。ユーザー名"]。私が本当にjson文字列を送信しているので、この場合配列を取得していますか?対jsonオブジェクト?

編集 x2:

したがって、phpはjson_decodeにtrueを送信しているため、連想配列にしています。

4

3 に答える 3

3

あなたのコードの問題はあなたが設定した行にあると思いますdata: '{....}'
正しく渡すには、json形式である必要があります(文字列形式でもかまいませんが、サーバー側で解析する必要があります)。

以下のコードは正しく機能しているはずです。

$.ajax({
    type: "post",
    url: BaseUrl + "User/Login",
    data: {"apiKey":"c7089786-7e3a-462c-a620-d85031f0c826","appIDGiven":"200","userName":"matt2","password":"pass"},
    success: function(data){
        console.log(data);
    },
    error: function(request){
        console.log(request);
    }
});

サーバー側で:$_POST['apiKey'] $_POST['appIDGiven']などを試してください。

于 2012-07-08T19:15:09.507 に答える
1

dataオプションは、objectまたはシリアル化された(例: "name1=value1&name2=value2") 文字列である必要があります。したがって、次のように渡す必要があります。

data: /*object*/{data:'{"apiKey":"c7089786-7e3a-462c-a620-d85031f0c826","appIDGiven":"200","userName":"matt2","password":"pass"}'},
                // ^-----this is added for $_POST["data"]

または好き:

data: /*serialized string*/'data={"apiKey":"c7089786-7e3a-462c-a620-d85031f0c826","appIDGiven":"200","userName":"matt2","password":"pass"}',
                           // ^-----this is added for $_POST["data"]
于 2012-07-08T18:45:26.073 に答える
0

まず、送信されるデータは文字列ではなくJSON オブジェクトである必要があります。引用符を削除します。

また、サーバー側では、入力をより適切にデコードできます(ドキュメントを参照)$_POST['data']json_decode()

于 2012-07-08T18:57:31.030 に答える