0

私は必死の助けが必要です。私はこれで4時間過ごしましたが、かなり疲れてきました。:/ これが私の状況です:

外部サイトに (jQuery $.post を使用して) POST 要求を行う Javascript アプリケーションがあります。外部サイトでは、Apache Camel を Jetty で実行して Web に公開しています。私が Camel で作成した Web サービスは、すべての要求に対して JSON データを想定しています。たとえば、1 つのリクエストには id が必要なので、それを送信し{"id": 10}ます。

ここに私の問題があります: Javascript からは動作しません。投稿リクエストを送信するツールがいくつかあります (ブラウザ用の Poster 拡張機能など)。Poster を使用して body を に設定すると{"id": 10}、問題なく動作します。サービスでその正確な文字列を取得します。

しかし、Javascript から投稿すると、何か違う結果が得られます。JSON オブジェクトを送信すると、サービス側で文字列 "id=10" が表示されます。(このシナリオでは問題ありませんが、最終的には実際の JSON オブジェクトが必要になります。) JSON オブジェクトを文字列化すると、JSON 文字列が取得され、すべての文字だけがエスケープされます。(例: "%7Bid%33...")。

データを投稿するために可能なすべての方法を試したことを誓いますが、奇妙な既に解析された JSON を取得するか、エスケープされた文字列を取得します (またはまったく何も取得しません)。JavascriptでJSONオブジェクトを解析せずに送信する方法はありますか(私の投稿ツールのように)? そうでない場合、取得した JSON 文字列をエスケープ解除する安全で効率的な方法はありますか?

どんな助けでも本当に感謝しています。

4

4 に答える 4

1

もう少し情報が必要な気がしますが、この JavaScript プラグインを見てください。それがあなたの解決策かもしれません: https://github.com/flowersinthesand/jquery-stringifyJSON

于 2012-07-19T04:09:18.970 に答える
0

ここでの答えは私にいくつかのヒントを与えました、しかし結局、それが正しく働く前にそれは多くの微調整でした。私は3つのことをしなければなりませんでした:

  1. 追加しprocessData: falseます。
  2. JSONオブジェクトをJSON文字列に変換します。contentTypeオブジェクトとして残した場合(に変更した場合でも)、リクエストは実行されませんapplication/json
  3. を変更しcontentType to text/plainます。これにより、生の文字列として送信されました。

そして、それがトリックをしたのです。サーバー側で必要なJSON文字列を取得します。

于 2012-07-19T13:11:32.473 に答える
0

JSON オブジェクトを送信すると、サービス側で文字列 "id=10" が表示されます。

Javascript はこの変換を行わないため、サーバーが行います。

サーバーは、REST ベースのサービスの一般的な機能であるcontent-typePOST とapplication/jsonvstext/plainまたは などに基づいて、異なる反応を示す可能性があります。text/html

于 2012-07-19T08:04:59.027 に答える
0

jQuery.ajax を使用して(デフォルトは)に設定processDataしてみてください。falsetrue

$.ajax({
  url: '/where/to/post',
  type: 'POST',
  data: {"id": 10},
  processData: false
});

通常、jQuery は何でも のdataようなクエリ文字列形式に変換しますid=10。このprocessDataフラグは、jQuery に文字通り json ハッシュマップとして解釈するように指示します。

于 2012-07-19T04:07:41.740 に答える