-2

シンプルな html ページがあり、jquery/ajax を使用して、シンプルなjsonファイルを php サーバーに送信しようとしていますが、スクリプトの動作は本当に混乱しています..

まず最初に、私がウェブで見つけたもの(他のSOの質問)を試しました:

スクリプト1


var data = {"deviceUUID":"lssfds998", "os":"bb", "pushToken":"l1355436gdfsfdsl"};

$.ajax({
                         type: "POST",
                         url: "http://192.138.4.115/Server_CityInfo/register.php",
                         data: data,
                         contentType: "application/json; charset=utf-8",
                         dataType: "json"
                         }).success(function(response, status, xhr){
                             console.log(response);
                             console.log(status);
                             console.log(xhr);
                        });

Script1 は、空の (null) json ファイルをサーバーに送信します。

スクリプト 2


var data = {"deviceUUID":"lssfds998", "os":"bb", "pushToken":"l1355436gdfsfdsl"};

$.ajax({
                         type: "POST",
                         url: "http://192.168.4.113/Server_CityInfo/register.php",
                         data: data,
                         //contentType: "application/json; charset=utf-8",
                         dataType: "json"
                         }).success(function(response, status, xhr){
                             console.log(response);
                             console.log(status);
                             console.log(xhr);
                        });

Script2 では、行のcontentType: "application/json; charset=utf-8"結果にコメントを付けると、サーバー側で次のような結果が得られますdeviceUUID=lssfds998&os=bb&pushToken=l1355436gdfsfdsl。しかし、まだ必要なjson形式ではありません。

スクリプト3


var data = '{"deviceUUID":"lssfds998", "os":"bb", "pushToken":"l1355436gdfsfdsl"}';

$.ajax({
                         type: "POST",
                         url: "http://192.168.4.113/Server_CityInfo/register.php",
                         data: data,
                         //contentType: "application/json; charset=utf-8",
                         dataType: "json"
                         }).success(function(response, status, xhr){
                             console.log(response);
                             console.log(status);
                             console.log(xhr);
                        });

Script3 では、データ変数は文字列です。ご覧のとおり、内部でラップしています' '。今回は、サーバーでjsonを正しく取得します。

ただし、行にコメントを付けてdataType: "json"も、サーバーでjsonを正しく取得します。それで、ここで何が起こっているのですか?データをjsonにエンコードできないので、最終的には手動でエンコードする必要があると感じています。それは間違っていますか?リクエストでdataTypeandを指定する必要は本当にありますか? contentTypeデータを : のような完全に細かい json 文字列のように見せ'{"deviceUUID":"lssfds998", "os":"bb", "pushToken":"l1355436gdfsfdsl"}'て、前述のパラメーターを使用せずに送信した場合、それは正しいですか?

目的を達成するために、これは私のサーバースクリプトの外観です:

// We use php://input to get the raw $_POST results.
$json = file_get_contents('php://input');
$json_post = json_decode($json, true);

//creating variables from received json
$deviceUDID = $json_post['deviceUUID'];
$os = $json_post['os'];
$pushToken = $json_post['pushToken'];
4

1 に答える 1

0

以下の変更点をご覧ください。

JSON 配列は次のようになります。

    arr = '[
            {
                "deviceUUID": "lssfds998",
                "os": "bb",
                "pushToken": "l1355436gdfsfdsl"


     }
    ]';

$.ajax
({
     type: "POST",
     url: " DOMAIN/Server_CityInfo/register.php",
     data: {data:arr},
     success : function(result)
     {
         // do something
     }

});

サーバー側の場合:

<?php
$data = $_POST['data'];
$json = json_decode($data);

// do something with JSON ARRAY
?>

これがうまくいくことを願っています。ありがとう

于 2013-05-21T08:41:03.113 に答える