1

だから、ここに私の問題があります(ここに投稿された他の同様の問題を調べて問題を解決しようとしましたが、うまくいきませんでした)

コードのスニペット (中括弧などは無視):

json_string = JSON.stringify(json_links); 
var data_obj = { id:n_id, links_json: json_string }; 

$.ajax({ 
url: 'server_api', 
type: 'GET', 
data: data_obj, 
dataType: 'json',

サーバー側では、perl モジュール、JSON および関数、decode_json を使用してデコードしようとしましたが、文字オフセット 48 (「\x{92f}does-it-. ..") '

POST メソッドと content-type の組み合わせを使用してみましたが、うまくいきませんでした。jQueryのドキュメントは、デフォルトでUTF-8にエンコードすることを指定していますか? 助けてください?

4

2 に答える 2

6

文字列化された JSON としてデータを渡してみてください。

$.ajax({
    url: 'server_api',
    type: 'GET',
    data: JSON.stringify(data_obj),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json'
});
于 2012-12-18T19:18:44.353 に答える
1

おそらく、バイナリ UTF-8 文字ではなく、エンコードされた Unicode 文字を decode_json に渡しています。問題と 2 つの簡単な潜在的な修正については、こちらを参照してください。

他にも、data_obj でエンティティ名をエスケープしていないことが挙げられます (関連する値を考えると、エンティティ名自体がエンティティ名であると想定しています)。代わりに、それらの変数の内容を挿入しようとしています。それらを識別子自体にしたいと思っていると思います:

data_obj = { 'id' : n_id, 'links_json' : json_string }

これを使用してサーバーに既に保存されているデータに単にアクセスする場合を除き、より適切に RESTful にするために、代わりに POST (または PUT) を使用することを検討する必要があります。

また、GET は URL に追加して実行されるため、次の点に注意する必要があります。

データオブジェクト、文字列

サーバーに送信されるデータ。まだ文字列でない場合は、クエリ文字列に変換されます。GET リクエストの URL に追加されます。この自動処理を防ぐには、processData オプションを参照してください。

processData、ブール値

デフォルト: 真

デフォルトでは、オブジェクト (技術的には文字列以外のもの) としてデータ オプションに渡されたデータは処理され、デフォルトのコンテンツ タイプ「application/x-www-form-urlencoded」に適合するクエリ文字列に変換されます。 . DOMDocument またはその他の未処理のデータを送信する場合は、このオプションを false に設定します。

データには URL が追加されるため、JavaScript が適切にバイナリ エンコードされた UTF-8 を送信しようとしてもエンコードされた Unicode に変換される可能性があります。

さらに、送信datatypeするデータとは無関係であり、受信する予定のデータを指します。あなたはこれを理解していると思いますが、私は確信したかったのです。

したがって、自分で文字列化するのdata_objではなく、自分で文字列化する.ajaxことをお勧めします。

受信した (サーバー側) データをそのまま (json デコードを実行せずに) 単純にエコーして、サーバー側で受信しているものを確認し、それが期待したものと一致するかどうかを確認しましたか? 問題を再現するサンプル データセットがなければ、問題が何であるかを判断するのは困難です。ただし、これは Perl の json_decode と関連するエンコーディングの問題 (ここの最初の行) に関連していると思います。

于 2012-12-18T19:57:56.660 に答える