1

我在 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。有没有其他人遇到过这个或有任何可能帮助我的信息?

4

2 回答 2

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"
    }
});
于 2014-08-23T13:33:00.290 回答
0

HTTP 规范规定内容类型设置字符意义。也许 jQuery 文档应该更清楚。

于 2012-09-10T06:27:36.557 回答