3

jQuery で .load() メソッドを使用していますが、サーバーへの要求では UTF-8 ではなく ISO-8859-1 文字セットを使用する必要があることに気付きました。問題は、別のエンコーディングを使用するようにロード メソッドを設定する方法が見つからないことです。.ajax メソッドにはこれを行うための 'content-type' 設定があると読みましたが、load メソッドはどうですか? ページを更新せずに一部の div からデータを更新する必要がある場合、load は非常に便利です。

どんな助けでも感謝します、ありがとう。

4

2 に答える 2

8

を使用ajaxSetupすると、新しい ajax 呼び出しの設定を指定できます。

関数を使用する後続のすべての Ajax 呼び出しは、個々の呼び出しによってオーバーライドされない限り、次の $.ajaxSetup() の呼び出しまで、新しい設定を使用します。

XMLHttpRequest オブジェクトを送信前に変更するためのコールバック関数をbeforeSend提供できます。jQuery リファレンス

Mozillaは以下に関するドキュメントを提供していますoverrideMimeType():

サーバーから返された MIME タイプをオーバーライドします。これは、たとえば、サーバーがストリームを text/xml として報告しない場合でも、ストリームを強制的に処理して解析するために使用できます。このメソッドは、send() の前に呼び出す必要があります。

この回答からコードを借りると、次のことができます。

$.ajaxSetup({
    'beforeSend' : function(xhr) {
        xhr.overrideMimeType('text/html; charset=ISO-8859-1');
    },
});
于 2012-09-04T23:44:32.533 に答える
0
//$('body').append('<div id=qqq>dfsdfsdf</div>')
//$('#qqq').load2('/index.php?showtopic=925 #post-29397','','','text/html; charset=utf-8')
//$('#qqq').load2('/index.php?showtopic=925 #post-29397','','','text/plain; charset=windows-1251')
//


jQuery.fn.load2 = function( url, params, callback, overrideMimeTypeVar) {
    if ( typeof url !== "string" && _load ) {
        return _load.apply( this, arguments );
    }

    var selector, type, response,
        self = this,
        off = url.indexOf(" ");

    if ( off >= 0 ) {
        selector = jQuery.trim( url.slice( off ) );
        url = url.slice( 0, off );
    }

    // If it's a function
    if ( jQuery.isFunction( params ) ) {

        // We assume that it's the callback
        callback = params;
        params = undefined;

    // Otherwise, build a param string
    } else if ( params && typeof params === "object" ) {
        type = "POST";
    }

    // If we have elements to modify, make the request
    if ( self.length > 0 ) {
        jQuery.ajax({
            url: url,

            // if "type" variable is undefined, then "GET" method will be used
            type: type,
            dataType: "html",
            data: params,
            // ++++++++++++++++++++++++++++++++++++++++++++++++++
            beforeSend: function(x) {
                if(x && x.overrideMimeType && overrideMimeTypeVar!=''){
                    x.overrideMimeType(overrideMimeTypeVar);
                    }}
            // +++++++++++++++++++++++++++++++++++++++++++++++++++      
        }).done(function( responseText ) {

            // Save response for use in complete callback
            response = arguments;

            self.html( selector ?

                // If a selector was specified, locate the right elements in a dummy div
                // Exclude scripts to avoid IE 'Permission Denied' errors
                jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :

                // Otherwise use the full result
                responseText );

        }).complete( callback && function( jqXHR, status ) {
            self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
        });
    }

    return this;
};
于 2015-12-30T16:35:29.263 に答える