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)フォーマットを受け入れます-これをすべてのブラウザーで一貫させる方法はありますか?
前もって感謝します!
JavaScriptのencodeURI()
関数を使用して、URLを「Firefox形式」にエンコードすることができます。
エンコードされていない形式で_[Product Type B]
_を渡すことは無効であるため、ブラウザがそれをどのように作成するかは定義されていません。
製品タイプパーツに対して encodeURIComponent()
を実行します。
これを行うには、.serialize()がjqueryの方法になると思います。
ここを確認してください: http://api.jquery.com/serialize/
jqueryのプラグインもあります: http://plugins.jquery.com/project/URLEncode
またはJavaScriptの方法... encodeURIComponent()
ここを確認してください: http://www.w3schools.com/jsref/jsref_encodeURI.asp
簡単な修正は、$。ajaxに渡す前にURLをencodeURI()
することです。 $ .ajax関数を薄いラッパーに置き換えて、{-}リテラルを取得し、URLをエンコードしてからoriginal関数に渡すこともできます。