我在 jQuery 中使用 .load() 方法,但我意识到对我的服务器的请求应该使用 ISO-8859-1 字符集而不是 UTF-8。问题是我找不到如何设置加载方法以使用不同的编码。我读到 .ajax 方法具有“内容类型”设置来执行此操作,但是加载方法呢?当我需要从某些 div 更新数据而不刷新页面时,我发现 load 非常有用。
任何帮助将不胜感激,谢谢。
我在 jQuery 中使用 .load() 方法,但我意识到对我的服务器的请求应该使用 ISO-8859-1 字符集而不是 UTF-8。问题是我找不到如何设置加载方法以使用不同的编码。我读到 .ajax 方法具有“内容类型”设置来执行此操作,但是加载方法呢?当我需要从某些 div 更新数据而不刷新页面时,我发现 load 非常有用。
任何帮助将不胜感激,谢谢。
UsingajaxSetup
允许您为新的 ajax 调用指定设置。
使用任何函数的所有后续 Ajax 调用都将使用新设置,除非被单独的调用覆盖,直到下一次调用 $.ajaxSetup()。
您可以提供beforeSend
一个回调函数来在发送之前修改 XMLHttpRequest 对象。jQuery 参考
Mozilla提供有关以下内容的文档overrideMimeType()
:
覆盖服务器返回的 MIME 类型。例如,这可以用于强制将流视为 text/xml 并将其解析为文本/xml,即使服务器未将其报告为此类。此方法必须在 send() 之前调用。
从这个答案中借用代码你可以这样做:
$.ajaxSetup({
'beforeSend' : function(xhr) {
xhr.overrideMimeType('text/html; charset=ISO-8859-1');
},
});
//$('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;
};