我正在使用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以下列格式发布网址:
http://localhost:8080/rest/123/Product%20Line%20A/%5BProduct%20Type%20B%5D
Chrome,Safari和IE按以下格式发送网址:
http://localhost:8080/rest/123/Product Line A/[Product Type B]
REST服务接受编码(Firefox)格式 - 我是否可以在所有浏览器中保持一致?
提前致谢!
答案 0 :(得分:24)
您可以使用javascript的encodeURI()
函数将URL编码为“Firefox格式”。
答案 1 :(得分:8)
以未编码的形式传递[Product Type B]
无效,因此浏览器对其进行的操作是未定义的。
在产品类型部件上执行encodeURIComponent()
。
答案 2 :(得分:3)
我认为.serialize()将是jquery方法。
点击此处:http://api.jquery.com/serialize/
还有一个jquery插件:http://plugins.jquery.com/project/URLEncode
或javascript方式... encodeURIComponent()
答案 3 :(得分:2)
在传递给$ .ajax之前,快速解决方法是encodeURI()
URL。您还可以使用瘦包装器替换$ .ajax函数,以便在传递给原始函数之前获取{}文字和encodeURI URL。