web-dev-qa-db-ja.com

jQueryの$ .ajax URLエンコーディングの問題

JQueryの$ .ajaxメソッドを使用して、RESTサービスにデータを送信および取得します。$。ajaxメソッドに提供するURLの一部には、スペースやその他の特殊文字を使用する必要がありますエンコード。

問題は、Chrome、Safari(Webkit)、およびInternet Explorerブラウザーにあります。 Firefox POSTはエンコードされたURLに変換されますが、他のブラウザはPOSTエンコードされていないURLに変換されます。

例として:

$.ajax ({
  url: "http://localhost:8080/rest/123/Product Line A/[Product Type B]",
  type: "POST",
  dataType: "json",
  data: { ... },
  success: function(...){},
  error: function(...){}
})

Firefoxは、次の形式でURLを配置します。

http://localhost:8080/rest/123/Product%20Line%20A/%5BProduct%20Type%20B%5D

Chrome、Safari、およびIEは、次の形式でURLを配置します。

http://localhost:8080/rest/123/Product Line A/[Product Type B]

RESTサービスはエンコードされた(Firefox)フォーマットを受け入れます-これをすべてのブラウザーで一貫させる方法はありますか?

前もって感謝します!

17
schone

JavaScriptのencodeURI()関数を使用して、URLを「Firefox形式」にエンコードすることができます。

24
Aatch

エンコードされていない形式で_[Product Type B]_を渡すことは無効であるため、ブラウザがそれをどのように作成するかは定義されていません。

製品タイプパーツに対して encodeURIComponent() を実行します。

8
Pekka

これを行うには、.serialize()がjqueryの方法になると思います。

ここを確認してください: http://api.jquery.com/serialize/

jqueryのプラグインもあります: http://plugins.jquery.com/project/URLEncode

またはJavaScriptの方法... encodeURIComponent()

ここを確認してください: http://www.w3schools.com/jsref/jsref_encodeURI.asp

3
mahatmanich

簡単な修正は、$。ajaxに渡す前にURLをencodeURI()することです。 $ .ajax関数を薄いラッパーに置き換えて、{-}リテラルを取得し、URLをエンコードしてからoriginal関数に渡すこともできます。

2
Alex Wright