2012-03-12 10 views
0

私のシステムは、PHPでMySQLクエリを実行してデータを取得します。取得されたデータは、以下に似たアレイに構成されている:PHPからJSONへのJSON AJAX経由で16進数の角カッコを渡す

$ret = array(
    "name" => "John Doe", 
    "location" => "Antarctica", 
    "description" => "Height < 200" 
); 

私は介してAJAXを介してこれを返す:jqXHR(

echo json_encode($ret); 

AJAXエラーイベントが発生し、返されたデータの検査の際にされ.responseText)をChromeコンソールで表示すると、私は気付いています:

"description" : "Height \x3c 200" 

これは解析エラーです。

私は\ x3cが "<"という16進数表記であり、そのフォームがJSONを無効にすることは明らかです。私はそれを有効にするための方法を見つけることができないようですが、私は角度付きブラケットをJSONを介して有効な形式で渡すことができます。 PHP側の "\ x3c"の直接の文字列置換は機能しません。

また、AJAXリターンをHTMLとして指定することもできますが、私は一連のデータをJSONを使用して渡しています。デバッグに

echo json_encode($ret, JSON_HEX_TAG); 

使用json_last_error()

答えて

1
ネイティブクロームJSONオブジェクト(window.JSON)、私はあなたのPHPのプログラムから何の問題出力を解析しないことができていますを使用して

"description" : "Height \x3c 200" 

とにそれをシリアライズすることができていますjavascript JSONオブジェクトです。あなたはネイティブのJSONオブジェクトをサポートしていないブラウザとの互換性が必要な場合

var jsonString = JSON.stringify({"description": "Height \x3c 200"}); 
//jsonString has the value "{"description":"Height < 200"}" 

var jsonObject = JSON.parse(jsonString); 
//jsonObject has an object that looks like this 
//Object 
//description: "Height < 200" 
//__proto__: Object 

は、私はそのようなjQueryのようライブラリを使用することをお勧めします。

さらに、PHPのjson_encode()関数は設定オブジェクトを渡してJSONのエンコード方法を正確にカスタマイズすることができますが、 '\ x3c'が気に入らなければjavascriptパーサーに変更することができます「≶」のような方が好き:)

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

+1

私はJSON.stringify()などのメソッドを経由してAJAX-返されたデータを操作する機会を持っていないので、私は、サードパーティJSコントロールを使用しています。しかし、json_encode()修飾子はcharmのように動作します:) – kaspnord

関連する問題