git.asbjorn.biz
/
jquery.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
d66cc55
)
Fixes abort in prefilter. No global event will be fired in that case even if the...
author
jaubourg
<j@ubourg.net>
Fri, 4 Feb 2011 21:19:23 +0000
(22:19 +0100)
committer
jaubourg
<j@ubourg.net>
Fri, 4 Feb 2011 21:19:23 +0000
(22:19 +0100)
src/ajax.js
patch
|
blob
|
history
test/unit/ajax.js
patch
|
blob
|
history
diff --git
a/src/ajax.js
b/src/ajax.js
index
f33bd49
..
e56db83
100644
(file)
--- a/
src/ajax.js
+++ b/
src/ajax.js
@@
-388,6
+388,8
@@
jQuery.extend({
parts,
// The jqXHR state
state = 0,
parts,
// The jqXHR state
state = 0,
+ // To know if global events are to be dispatched
+ fireGlobals,
// Loop variable
i,
// Fake xhr
// Loop variable
i,
// Fake xhr
@@
-529,7
+531,7
@@
jQuery.extend({
jqXHR.statusCode( statusCode );
statusCode = undefined;
jqXHR.statusCode( statusCode );
statusCode = undefined;
- if ( s.global ) {
+ if ( fireGlobals ) {
globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
[ jqXHR, s, isSuccess ? success : error ] );
}
globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
[ jqXHR, s, isSuccess ? success : error ] );
}
@@
-537,7
+539,7
@@
jQuery.extend({
// Complete
completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
// Complete
completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
- if ( s.global ) {
+ if ( fireGlobals ) {
globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
// Handle the global AJAX counter
if ( !( --jQuery.active ) ) {
globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
// Handle the global AJAX counter
if ( !( --jQuery.active ) ) {
@@
-594,6
+596,14
@@
jQuery.extend({
// Apply prefilters
inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
// Apply prefilters
inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+ // If request was aborted inside a prefiler, stop there
+ if ( state === 2 ) {
+ return false;
+ }
+
+ // We can fire global events as of now if asked to
+ fireGlobals = s.global;
+
// Uppercase the type
s.type = s.type.toUpperCase();
// Uppercase the type
s.type = s.type.toUpperCase();
@@
-601,7
+611,7
@@
jQuery.extend({
s.hasContent = !rnoContent.test( s.type );
// Watch for a new set of requests
s.hasContent = !rnoContent.test( s.type );
// Watch for a new set of requests
- if ( s.global && jQuery.active++ === 0 ) {
+ if ( fireGlobals && jQuery.active++ === 0 ) {
jQuery.event.trigger( "ajaxStart" );
}
jQuery.event.trigger( "ajaxStart" );
}
@@
-678,7
+688,7
@@
jQuery.extend({
// Set state as sending
state = jqXHR.readyState = 1;
// Send global event
// Set state as sending
state = jqXHR.readyState = 1;
// Send global event
- if ( s.global ) {
+ if ( fireGlobals ) {
globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
}
// Timeout
globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
}
// Timeout
diff --git
a/test/unit/ajax.js
b/test/unit/ajax.js
index
b810313
..
57e6512
100644
(file)
--- a/
test/unit/ajax.js
+++ b/
test/unit/ajax.js
@@
-2177,6
+2177,25
@@
test("jQuery.ajax - transitive conversions", function() {
});
});
+test("jQuery.ajax - abort in prefilter", function() {
+
+ expect( 1 );
+
+ jQuery.ajaxPrefilter(function( options, _, jqXHR ) {
+ if ( options.abortInPrefilter ) {
+ jqXHR.abort();
+ }
+ });
+
+ strictEqual( jQuery.ajax({
+ abortInPrefilter: true,
+ error: function() {
+ ok( false, "error callback called" );
+ }
+ }), false, "Request was properly aborted early by the prefilter" );
+
+});
+
test("jQuery.ajax - active counter", function() {
ok( jQuery.active == 0, "ajax active counter should be zero: " + jQuery.active );
});
test("jQuery.ajax - active counter", function() {
ok( jQuery.active == 0, "ajax active counter should be zero: " + jQuery.active );
});