我正在使用旧版本的backbone.js(0.5.3)和jQuery 1.7.2,当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。有没有其他人遇到这个或有任何可能帮助我的信息?
答案 0 :(得分: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"
}
});
答案 1 :(得分:0)
HTTP spec表示内容类型设置了字符意义。也许jQuery文档应该更清楚。