jQuery的$ .ajax URL编码问题

时间:2010-12-19 23:44:54

标签: jquery ajax firefox webkit url-encoding

我正在使用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)格式 - 我是否可以在所有浏览器中保持一致?

提前致谢!

4 个答案:

答案 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()

点击此处: http://www.w3schools.com/jsref/jsref_encodeURI.asp

答案 3 :(得分:2)

在传递给$ .ajax之前,快速解决方法是encodeURI() URL。您还可以使用瘦包装器替换$ .ajax函数,以便在传递给原始函数之前获取{}文字和encodeURI URL。