【问题标题】:Asynchronous json javascript query fails with unicode characters on IE only异步 json javascript 查询失败,仅在 IE 上使用 unicode 字符
【发布时间】:2011-01-28 00:02:36
【问题描述】:

我在做ajax查询

$.ajax({
    url: (some url),
    dataType: "json",
    error: function(xhr, textStatus, errorThrown) {
        (error handler)         
    },
    data : requestData,
    success: function(data) {
        (success handler)
    }
});

在 Opera/Firefox/Webkit 浏览器上完美运行。但是,当使用 IE 并且 requsestData 包含一些非 ascii 字符的字符串(例如 ł)时,会返回错误并且 xhr 状态为 12031。请注意,即使将 url 替换为某些现有文档也不会给出 404 状态(但在 Opera 等中确实如此。 ),所以我认为查询根本没有执行。

关于提到的重复:不幸的是它没有帮助我。尝试了没有结果的 encodeURIComponent(难怪,当对象传递给 requestData 时,jquery 会自动执行此操作)。甚至硬编码查询(作为字符串传递),但它也不起作用。

更新: 如果缓存在 IE 中,查询将使用非 ascii 数据。这意味着我可以复制准备好的 XHR url,将其粘贴到另一个 IE 选项卡中,然后使用 ajax 刷新原始页面并且不会收到错误。

再次更新: 固定的。没有正确编码的是 ajax 查询中给出的引用 URL。它包含带有非 ascii 字符的哈希(但是,如果缓存,工作正常)。感谢您的努力。

【问题讨论】:

标签: javascript jquery json internet-explorer utf-8


【解决方案1】:

请记住,您的 Ajax 调用必须符合 UTF8,因为您没有指定字符集,所以它是默认值。

该字符在 UTF8 中是不可接受的,您必须自己对其进行编码。没错,有些浏览器可能会为你做这件事,但基本上你需要在 IE 中自己做。

【讨论】:

  • 嗯,您是说将内容类型设置为 application/x-www-form-urlencoded;charset=utf-8?不幸的是没有帮助。
  • 不,已经假定为 UTF8。您有责任确保 URL 编码为 UTF8。 “ł”不是有效的 UTF8 字符,必须在 UTF8 中编码为 2 或 3 个字节,您必须自己完成。
  • 嗯,ł 是有效的 UTF8 字符,编码为两个字节,并且编码正确(我可以使用 key=value 格式将其插入 requestData 为 %C5%82,但它也不起作用)。除了 AFAIK jquery 无论如何都会将对象形式的 requestData 编码为 utf8。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 2021-09-12
  • 2012-02-13
  • 2012-06-04
相关资源
最近更新 更多