我刚刚转到jquery 1.11.1(在此项目之前我是1.2.x)。用于将响应文本/ html拉入元素的$ .load函数似乎不会突然触发回调!
$("#thing").load("page", null, callback);
所以我调试了jquery代码..正如预期的那样,它使用$ .ajax,抓取一个页面,使用$ .html在自己中播放它然后回调实际上是在$ .ajax的“完整”函数上触发的。无论ajax是否成功,此功能始终始终触发。在驾驶自己INSANE一段时间之后,我试着自己调用这个电话来测试我真的不会发疯..这就是我发现的
$.ajax({url:"page"})
.done(function(r){
$("#thing").html(r);
})
.complete(function(){alert("complete");});
这会填充元素,但确实没有给我alernt ..但是下面确实给了我一个警告!..为什么?
$.ajax({url:"page"})
.done(function(r){
//$("#thing").html(r);
alert("done...?");
})
.complete(function(){alert("complete");});
我完成了并完成了警告..
更新1
关于使用“always”而不是“complete”的评论。我想使用“load”而不是“ajax”,这是jq 1.11.1中的代码
// Keep a copy of the old load method
var _load = jQuery.fn.load;
/**
* Load a url into a page
*/
jQuery.fn.load = function( url, params, callback ) {
if ( typeof url !== "string" && _load ) {
return _load.apply( this, arguments );
}
var selector, response, type,
self = this,
off = url.indexOf(" ");
if ( off >= 0 ) {
selector = jQuery.trim( url.slice( off, url.length ) );
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
}).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;
};
注意它如何使用“完整”..
答案 0 :(得分:1)
这里的问题很奇怪。从我的页面返回的HTML无效!虽然它足够有效显示。在“load”方法中,在附加responseText / html时调用$ .parseHTML方法。这会抛出并返回html,您将看到填充在目标元素中的html。
应该做的是捕获此异常并忽略它,以便每次调用“完整”方法(所以我将其视为jquery中的错误)。