シンプルな 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にエンコードできないので、最終的には手動でエンコードする必要があると感じています。それは間違っていますか?リクエストでdataType
andを指定する必要は本当にありますか? 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'];