Make sure regular settings object is set as context for all Ajax requests, if none is specified. Fixes #5838.

This commit is contained in:
John Resig 2010-01-16 10:11:01 -05:00
parent 6618ff0b0a
commit 155ecf42a0
2 changed files with 38 additions and 14 deletions

View file

@ -530,7 +530,7 @@ jQuery.extend({
handleError: function( s, xhr, status, e ) {
// If a local callback was specified, fire it
if ( s.error ) {
s.error.call( s.context || window, xhr, status, e );
s.error.call( s.context || s, xhr, status, e );
}
// Fire the global callback

View file

@ -95,7 +95,7 @@ test("jQuery.ajax() - abort", function() {
});
test("Ajax events with context", function() {
expect(6);
expect(14);
stop();
var context = document.createElement("div");
@ -104,8 +104,16 @@ test("Ajax events with context", function() {
equals( this, context, e.type );
}
function callback(){
equals( this, context, "context is preserved on callback" );
function callback(msg){
return function(){
equals( this, context, "context is preserved on callback " + msg );
};
}
function nocallback(msg){
return function(){
equals( typeof this.url, "string", "context is settings on callback " + msg );
};
}
jQuery('#foo').add(context)
@ -116,20 +124,36 @@ test("Ajax events with context", function() {
jQuery.ajax({
url: url("data/name.html"),
beforeSend: callback,
success: callback,
error: callback,
beforeSend: callback("beforeSend"),
success: callback("success"),
error: callback("error"),
complete:function(){
callback.call(this);
setTimeout(proceed, 300);
callback("complete").call(this);
jQuery.ajax({
url: url("data/404.html"),
context: context,
beforeSend: callback("beforeSend"),
error: callback("error"),
complete: function(){
callback("complete").call(this);
jQuery('#foo').add(context).unbind();
jQuery.ajax({
url: url("data/404.html"),
beforeSend: nocallback("beforeSend"),
error: nocallback("error"),
complete: function(){
nocallback("complete").call(this);
start();
}
});
}
});
},
context:context
});
function proceed(){
jQuery('#foo').add(context).unbind();
start();
}
});
test("jQuery.ajax() - disabled globals", function() {