2

jQueryのajax-implementationを使用しているときにPHPファイルに渡したいjavascriptオブジェクトがあります。

直接渡そうとしましたが、エスケープされていないのでうまくいきません。JSON.stringifyを使用しようとしましたが、これも機能しません。

javascriptオブジェクトをPOST文字列に「シリアル化」する方法はありますか?

更新します。JSON.stringify()を再度使用しています。結果は次のとおりです。

JSON.stringify()の結果は次のとおりです。

{\"label\":\"Borne, Overijssel, Nederland\",\"value\":\"Borne, Overijssel, Nederland\",\"geocode\":{\"address_components\":[{\"long_name\":\"Borne\",\"short_name\":\"Borne\",\"types\":[\"locality\",\"political\"]},{\"long_name\":\"Borne\",\"short_name\":\"Borne\",\"types\":[\"administrative_area_level_2\",\"political\"]},{\"long_name\":\"Overijssel\",\"short_name\":\"OV\",\"types\":[\"administrative_area_level_1\",\"political\"]},{\"long_name\":\"Nederland\",\"short_name\":\"NL\",\"types\":[\"country\",\"political\"]}],\"formatted_address\":\"Borne, Nederland\",\"geometry\":{\"bounds\":{\"ca\":{\"b\":52.2832527,\"f\":52.3151634},\"ea\":{\"b\":6.688658900000064,\"f\":6.801415300000031}},\"location\":{\"Ya\":52.3002366,\"Za\":6.753725799999984},\"location_type\":\"APPROXIMATE\",\"viewport\":{\"ca\":{\"b\":52.2832527,\"f\":52.3151634},\"ea\":{\"b\":6.688658900000064,\"f\":6.801415300000031}}},\"types\":[\"locality\",\"political\"]}}

私がjson_decodeそれをするとき、それはNULLになります。助言がありますか?

4

2 に答える 2

1

オブジェクトを正当なJSON形式の文字列として渡す場合は、PHPに使用してみてください

json_decode()物事のphp側で。例

<?php
   $ojb = json_decode($_POST['my_json_string']);
?>

これにより、使用しているPHPのバージョンに応じて、オブジェクトが配列またはオブジェクトに変換されます。場合によっては、オブジェクトが複数のオブジェクトを含む配列に変換されます。例:

Array(
    [0] stdClass (
            'key1'=>'val1'
            'key2'=>'val2'
            'key3'=>'val3'
         )
)

上記は良い表現ではないことを私は知っていますが、その行の表現です。

その後、PHP側で、$ojb他の配列/オブジェクトと同じように変数を操作できます。

$something = $ojb[0]->key1;

編集 私は今あなたの文字列に気づきました。引用符が文字列でエスケープされているという事実は、JSONオブジェクトであるという事実を壊し、2つのことのいずれかを実行できます。オブジェクトを実行せずに、post/getを介してオブジェクトをPHPにそのまま渡します。 strigifyまたは..それをstrigfyする必要がある場合は、PHP側で試すことができます。

$ojb = stripslashes($_POST['my_json_string']); $ojb = json_decode($ojb);

これは、デコードプロセスを実行する前に、引用符からスラッシュを削除しようとします。

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

于 2012-10-26T18:58:53.720 に答える
0

POSTリクエストの生の本文を指定できます。生データは呼び出しの結果であり、適切なヘッダーJSON.stringifyを指定する必要があることを意味します。Content-Type

$.ajax(url, {
  type: 'POST',
  contentType: 'application/json',
  data: JSON.stringify(data),
  processData: false // prevent escaping and other processing
});

次に、次のようにPHPでオブジェクトを逆シリアル化できます。

$json = file_get_contents('php://input');
$data = json_decode($json);

生のリクエスト本文は特別なパスにマッピングされますphp://input

于 2012-10-26T22:13:34.513 に答える