17

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

提前致谢!

4

4 回答 4

23

正如您所说,您可以使用 javascript 的encodeURI()函数将 URL 编码为“Firefox 格式”。

于 2010-12-19T23:50:44.263 回答
7

以未编码的形式传递[Product Type B]是无效的,因此浏览器对它的构成是未定义的。

encodeURIComponent()对产品类型部分做一个。

于 2010-12-19T23:49:52.453 回答
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

于 2010-12-19T23:51:13.523 回答
1

快速修复将是encodeURI()在传递给 $.ajax 之前的 URL。您还可以用一个瘦包装器替换 $.ajax 函数,以在传递给原始函数之前获取 {} 文字和 encodeURI 的 URL。

于 2010-12-19T23:50:59.023 回答