【问题标题】:jQuery ajax not transmitting as utf-8jQuery ajax 不作为 utf-8 传输
【发布时间】:2012-07-16 00:41:02
【问题描述】:

我在 jQuery 1.7.2 中使用旧版本的骨干.js (0.5.3),当 Backbone.sync 执行时(它是 jQuery $.ajax() 的包装器),它将 contentType 显式设置为:

params.contentType = 'application/json';

这看起来像我想要的,但是内容似乎不是以 utf-8 格式发送的。我正在使用 ndash 进行测试,这是我的示例字符串:

Mathematics K–10

提交到服务器后我得到:

Mathematics K–10

现在,如果我将 contentType(在backbone.js 中)更改为:

params.contentType = 'application/json; charset=utf-8';

一切都按预期工作,我得到了正确的 ndash 字符。如果我注释掉主干中的原始 contentType 行,这也是行为。

jQuery 文档建议:

数据将始终使用 UTF-8 字符集传输到服务器

但是好像如果你显式设置了你的contentType,那么你也需要设置一个字符集。

我的问题是,这种行为有意义吗?我原以为我们总是希望默认值为 utf-8(如 jQuery 文档状态),即使我们明确更改 contentType。有没有其他人遇到过这个或有任何信息可以帮助我?

【问题讨论】:

    标签: javascript jquery backbone.js character-encoding


    【解决方案1】:

    您可以扩展 ajax 函数来为骨干 ajax 调用提供自定义标头,就像上面一样,

    Backbone.ajax = (function(_protoAjax) {
        var _Backboneajax = _protoAjax;
        return function(options) {
            var defaultOptions = {
                headers: {
                    "Accept": "application/json; charset=UTF-8",
                    "Content-Type": "application/json; charset=UTF-8"
                }
            };
            options = $.extend({}, defaultOptions, options)
            return _Backboneajax.call(this, options);
        };
    })(Backbone.ajax);  
    

    或者您可以在所有 JQuery Ajax 调用(不仅是 Backbone ajax 调用)上设置此标头,就像上面一样,

    $.ajaxSetup({
        headers: {
            "Accept": "application/json; charset=UTF-8",
            "Content-Type": "application/json; charset=UTF-8"
        }
    });
    

    【讨论】:

      【解决方案2】:

      HTTP spec 表示内容类型设置字符意义。也许 jQuery 文档应该更清楚。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-26
        • 2013-10-31
        • 2018-06-11
        • 1970-01-01
        • 2014-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多