1

jQuery 1.7.2 で古いバージョンの backbone.js (0.5.3) を使用しています。Backbone.sync が実行されると (jQuery $.ajax() のラッパー)、contentType が次のように明示的に設定されます。

params.contentType = 'application/json';

これは私が望むもののように見えますが、コンテンツは utf-8 として送信されていないようです。私は ndash でテストしています。ここに私のサンプル文字列があります:

Mathematics K–10

サーバーに送信した後、次のようになります。

Mathematics K–10

ここで、(backbone.js 内の) contentType を次のように変更すると:

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

すべてが期待どおりに機能し、正しい ndash 文字を取得します。これは、バックボーンの元の contentType 行をコメントアウトした場合の動作でもあります。

jQuery のドキュメントでは、次のことが提案されています。

データは常に UTF-8 文字セットを使用してサーバーに送信されます

ただし、contentType を明示的に設定する場合は、文字セットも設定する必要があるようです。

私の質問は、この動作は理にかなっていますか? contentType を明示的に変更したとしても、(jQuery のドキュメントにあるように) デフォルトを常に utf-8 にしたいと思っていたでしょう。他の誰かがこれに遭遇したか、私を助けるかもしれない情報を持っていますか?

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 呼び出し (バックボーン ajax 呼び出しだけでなく) にこのヘッダーを設定することもできます。

$.ajaxSetup({
    headers: {
        "Accept": "application/json; charset=UTF-8",
        "Content-Type": "application/json; charset=UTF-8"
    }
});
于 2014-08-23T13:33:00.290 に答える
0

HTTP 仕様では、content-type が文字の意味を設定すると述べています。おそらく、jQuery ドキュメントはより明確になるはずです。

于 2012-09-10T06:27:36.557 に答える