Merge branch 'master' of github.com:jquery/jquery
This commit is contained in:
commit
ea5ce8c2a9
60
src/ajax.js
60
src/ajax.js
|
@ -235,7 +235,7 @@ jQuery.extend({
|
||||||
|
|
||||||
// Utility function that handles dataType when response is received
|
// Utility function that handles dataType when response is received
|
||||||
// (for those transports that can give text or xml responses)
|
// (for those transports that can give text or xml responses)
|
||||||
determineDataType: function( ct , text , xml ) {
|
determineResponse: function( responses , ct ) {
|
||||||
|
|
||||||
var s = this,
|
var s = this,
|
||||||
contents = s.contents,
|
contents = s.contents,
|
||||||
|
@ -246,7 +246,7 @@ jQuery.extend({
|
||||||
response;
|
response;
|
||||||
|
|
||||||
// Auto (xml, json, script or text determined given headers)
|
// Auto (xml, json, script or text determined given headers)
|
||||||
if ( transportDataType === "*" ) {
|
if ( ct && transportDataType === "*" ) {
|
||||||
|
|
||||||
for ( type in contents ) {
|
for ( type in contents ) {
|
||||||
if ( ( regexp = contents[ type ] ) && regexp.test( ct ) ) {
|
if ( ( regexp = contents[ type ] ) && regexp.test( ct ) ) {
|
||||||
|
@ -256,23 +256,22 @@ jQuery.extend({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// xml and parsed as such
|
// Get response
|
||||||
if ( transportDataType === "xml" &&
|
for( type in responses ) {
|
||||||
xml &&
|
if ( type === transportDataType ) {
|
||||||
xml.documentElement /* #4958 */ ) {
|
break;
|
||||||
|
}
|
||||||
response = xml;
|
|
||||||
|
|
||||||
// Text response was provided
|
|
||||||
} else {
|
|
||||||
|
|
||||||
response = text;
|
|
||||||
|
|
||||||
// If it's not really text, defer to converters
|
|
||||||
if ( transportDataType !== "text" ) {
|
|
||||||
dataTypes.unshift( "text" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get final response
|
||||||
|
response = responses[ type ];
|
||||||
|
|
||||||
|
// If it's not the right dataType, handle the dataTypeList
|
||||||
|
if ( transportDataType !== type ) {
|
||||||
|
if ( transportDataType === "*" ) {
|
||||||
|
dataTypes.shift();
|
||||||
|
}
|
||||||
|
dataTypes.unshift( type );
|
||||||
}
|
}
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
|
@ -291,18 +290,16 @@ jQuery.extend({
|
||||||
// Main method
|
// Main method
|
||||||
ajax: function( url , options ) {
|
ajax: function( url , options ) {
|
||||||
|
|
||||||
// Handle varargs
|
// If options is not an object,
|
||||||
if ( arguments.length === 1 ) {
|
// we simulate pre-1.5 signature
|
||||||
|
if ( typeof( options ) !== "object" ) {
|
||||||
options = url;
|
options = url;
|
||||||
url = options ? options.url : undefined;
|
url = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Force options to be an object
|
// Force options to be an object
|
||||||
options = options || {};
|
options = options || {};
|
||||||
|
|
||||||
// Get the url if provided separately
|
|
||||||
options.url = url || options.url;
|
|
||||||
|
|
||||||
var // Create the final options object
|
var // Create the final options object
|
||||||
s = jQuery.extend( true , {} , jQuery.ajaxSettings , options ),
|
s = jQuery.extend( true , {} , jQuery.ajaxSettings , options ),
|
||||||
// jQuery lists
|
// jQuery lists
|
||||||
|
@ -427,10 +424,8 @@ jQuery.extend({
|
||||||
// Stored error
|
// Stored error
|
||||||
error,
|
error,
|
||||||
|
|
||||||
// Keep track of statusCode callbacks
|
// To keep track of statusCode based callbacks
|
||||||
oldStatusCode = statusCode;
|
oldStatusCode;
|
||||||
|
|
||||||
statusCode = undefined;
|
|
||||||
|
|
||||||
// If successful, handle type chaining
|
// If successful, handle type chaining
|
||||||
if ( status >= 200 && status < 300 || status === 304 ) {
|
if ( status >= 200 && status < 300 || status === 304 ) {
|
||||||
|
@ -582,12 +577,14 @@ jQuery.extend({
|
||||||
|
|
||||||
// Success/Error
|
// Success/Error
|
||||||
if ( isSuccess ) {
|
if ( isSuccess ) {
|
||||||
deferred.fire( callbackContext , [ success , statusText , jXHR ] );
|
deferred.resolveWith( callbackContext , [ success , statusText , jXHR ] );
|
||||||
} else {
|
} else {
|
||||||
deferred.fireReject( callbackContext , [ jXHR , statusText , error ] );
|
deferred.rejectWith( callbackContext , [ jXHR , statusText , error ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Status-dependent callbacks
|
// Status-dependent callbacks
|
||||||
|
oldStatusCode = statusCode;
|
||||||
|
statusCode = undefined;
|
||||||
jXHR.statusCode( oldStatusCode );
|
jXHR.statusCode( oldStatusCode );
|
||||||
|
|
||||||
if ( s.global ) {
|
if ( s.global ) {
|
||||||
|
@ -596,7 +593,7 @@ jQuery.extend({
|
||||||
}
|
}
|
||||||
|
|
||||||
// Complete
|
// Complete
|
||||||
completeDeferred.fire( callbackContext, [ jXHR , statusText ] );
|
completeDeferred.resolveWith( callbackContext, [ jXHR , statusText ] );
|
||||||
|
|
||||||
if ( s.global ) {
|
if ( s.global ) {
|
||||||
globalEventContext.trigger( "ajaxComplete" , [ jXHR , s] );
|
globalEventContext.trigger( "ajaxComplete" , [ jXHR , s] );
|
||||||
|
@ -630,7 +627,8 @@ jQuery.extend({
|
||||||
};
|
};
|
||||||
|
|
||||||
// Remove hash character (#7531: and string promotion)
|
// Remove hash character (#7531: and string promotion)
|
||||||
s.url = ( "" + s.url ).replace( rhash , "" );
|
// We also use the url parameter if available
|
||||||
|
s.url = ( "" + ( url || s.url ) ).replace( rhash , "" );
|
||||||
|
|
||||||
// Extract dataTypes list
|
// Extract dataTypes list
|
||||||
s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( /\s+/ );
|
s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( /\s+/ );
|
||||||
|
|
|
@ -12,8 +12,8 @@ var // Next active xhr id
|
||||||
// XHR used to determine supports properties
|
// XHR used to determine supports properties
|
||||||
testXHR;
|
testXHR;
|
||||||
|
|
||||||
// Create the request object; Microsoft failed to properly
|
// Create the request object
|
||||||
// (This is still attached to ajaxSettings for backward compatibility reasons)
|
// (This is still attached to ajaxSettings for backward compatibility)
|
||||||
jQuery.ajaxSettings.xhr = window.ActiveXObject ?
|
jQuery.ajaxSettings.xhr = window.ActiveXObject ?
|
||||||
/* Microsoft failed to properly
|
/* Microsoft failed to properly
|
||||||
* implement the XMLHttpRequest in IE7 (can't request local files),
|
* implement the XMLHttpRequest in IE7 (can't request local files),
|
||||||
|
@ -146,8 +146,9 @@ if ( jQuery.support.ajax ) {
|
||||||
// Get info
|
// Get info
|
||||||
var status = xhr.status,
|
var status = xhr.status,
|
||||||
statusText,
|
statusText,
|
||||||
response,
|
responseHeaders = xhr.getAllResponseHeaders(),
|
||||||
responseHeaders = xhr.getAllResponseHeaders();
|
responses = {},
|
||||||
|
xml = xhr.responseXML;
|
||||||
|
|
||||||
try { // Firefox throws an exception when accessing statusText for faulty cross-domain requests
|
try { // Firefox throws an exception when accessing statusText for faulty cross-domain requests
|
||||||
|
|
||||||
|
@ -184,15 +185,15 @@ if ( jQuery.support.ajax ) {
|
||||||
status
|
status
|
||||||
);
|
);
|
||||||
|
|
||||||
// Guess response & update dataType accordingly
|
// Construct response list
|
||||||
response =
|
if ( xml && xml.documentElement /* #4958 */ ) {
|
||||||
s.determineDataType(
|
responses.xml = xml;
|
||||||
xhr.getResponseHeader("content-type"),
|
}
|
||||||
xhr.responseText,
|
responses.text = xhr.responseText;
|
||||||
xhr.responseXML );
|
|
||||||
|
|
||||||
// Call complete
|
// Call complete
|
||||||
complete(status,statusText,response,responseHeaders);
|
complete(status,statusText,s.determineResponse( responses,
|
||||||
|
xhr.getResponseHeader( "content-type" ) ),responseHeaders);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
14
src/core.js
14
src/core.js
|
@ -399,7 +399,7 @@ jQuery.extend({
|
||||||
}
|
}
|
||||||
|
|
||||||
// If there are functions bound, to execute
|
// If there are functions bound, to execute
|
||||||
readyList.fire( document , [ jQuery ] );
|
readyList.resolveWith( document , [ jQuery ] );
|
||||||
|
|
||||||
// Trigger any bound ready events
|
// Trigger any bound ready events
|
||||||
if ( jQuery.fn.trigger ) {
|
if ( jQuery.fn.trigger ) {
|
||||||
|
@ -837,7 +837,7 @@ jQuery.extend({
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( _fired ) {
|
if ( _fired ) {
|
||||||
deferred.fire( _fired[ 0 ] , _fired[ 1 ] );
|
deferred.resolveWith( _fired[ 0 ] , _fired[ 1 ] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -845,7 +845,7 @@ jQuery.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
// resolve with given context and args
|
// resolve with given context and args
|
||||||
fire: function( context , args ) {
|
resolveWith: function( context , args ) {
|
||||||
if ( ! cancelled && ! fired && ! firing ) {
|
if ( ! cancelled && ! fired && ! firing ) {
|
||||||
|
|
||||||
firing = 1;
|
firing = 1;
|
||||||
|
@ -865,7 +865,7 @@ jQuery.extend({
|
||||||
|
|
||||||
// resolve with this as context and given arguments
|
// resolve with this as context and given arguments
|
||||||
resolve: function() {
|
resolve: function() {
|
||||||
deferred.fire( jQuery.isFunction( this.promise ) ? this.promise() : this , arguments );
|
deferred.resolveWith( jQuery.isFunction( this.promise ) ? this.promise() : this , arguments );
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -901,7 +901,7 @@ jQuery.extend({
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
fail: failDeferred.done,
|
fail: failDeferred.done,
|
||||||
fireReject: failDeferred.fire,
|
rejectWith: failDeferred.resolveWith,
|
||||||
reject: failDeferred.resolve,
|
reject: failDeferred.resolve,
|
||||||
isRejected: failDeferred.isResolved,
|
isRejected: failDeferred.isResolved,
|
||||||
// Get a promise for this deferred
|
// Get a promise for this deferred
|
||||||
|
@ -954,10 +954,10 @@ jQuery.extend({
|
||||||
args = arguments;
|
args = arguments;
|
||||||
resolveArray[ index ] = args.length > 1 ? slice.call( args , 0 ) : value;
|
resolveArray[ index ] = args.length > 1 ? slice.call( args , 0 ) : value;
|
||||||
if( ! --length ) {
|
if( ! --length ) {
|
||||||
deferred.fire( promise, resolveArray );
|
deferred.resolveWith( promise, resolveArray );
|
||||||
}
|
}
|
||||||
}).fail( function() {
|
}).fail( function() {
|
||||||
deferred.fireReject( promise, arguments );
|
deferred.rejectWith( promise, arguments );
|
||||||
});
|
});
|
||||||
return !deferred.isRejected();
|
return !deferred.isRejected();
|
||||||
});
|
});
|
||||||
|
|
|
@ -1911,9 +1911,9 @@ test( "jQuery.ajax - Location object as url (#7531)", 1, function () {
|
||||||
|
|
||||||
test( "jQuery.ajax - statusCode" , function() {
|
test( "jQuery.ajax - statusCode" , function() {
|
||||||
|
|
||||||
var count = 10;
|
var count = 12;
|
||||||
|
|
||||||
expect( 16 );
|
expect( 20 );
|
||||||
stop();
|
stop();
|
||||||
|
|
||||||
function countComplete() {
|
function countComplete() {
|
||||||
|
@ -1975,9 +1975,36 @@ test( "jQuery.ajax - statusCode" , function() {
|
||||||
}
|
}
|
||||||
}).statusCode( createStatusCodes( "all (immediately with method)" , isSuccess ) );
|
}).statusCode( createStatusCodes( "all (immediately with method)" , isSuccess ) );
|
||||||
|
|
||||||
|
var testString = "";
|
||||||
|
|
||||||
|
jQuery.ajax( url( uri ), {
|
||||||
|
success: function( a , b , jXHR ) {
|
||||||
|
ok( isSuccess , "success" );
|
||||||
|
var statusCode = {};
|
||||||
|
statusCode[ jXHR.status ] = function() {
|
||||||
|
testString += "B";
|
||||||
|
};
|
||||||
|
jXHR.statusCode( statusCode );
|
||||||
|
testString += "A";
|
||||||
|
},
|
||||||
|
error: function( jXHR ) {
|
||||||
|
ok( ! isSuccess , "error" );
|
||||||
|
var statusCode = {};
|
||||||
|
statusCode[ jXHR.status ] = function() {
|
||||||
|
testString += "B";
|
||||||
|
};
|
||||||
|
jXHR.statusCode( statusCode );
|
||||||
|
testString += "A";
|
||||||
|
},
|
||||||
|
complete: function() {
|
||||||
|
strictEqual( testString , "AB" , "Test statusCode callbacks are ordered like " +
|
||||||
|
( isSuccess ? "success" : "error" ) + " callbacks" );
|
||||||
|
countComplete();
|
||||||
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
test("jQuery.ajax - active counter", function() {
|
test("jQuery.ajax - active counter", function() {
|
||||||
ok( jQuery.active == 0, "ajax active counter should be zero: " + jQuery.active );
|
ok( jQuery.active == 0, "ajax active counter should be zero: " + jQuery.active );
|
||||||
|
|
|
@ -1002,7 +1002,7 @@ test("jQuery._Deferred()", function() {
|
||||||
|
|
||||||
deferred = jQuery._Deferred();
|
deferred = jQuery._Deferred();
|
||||||
|
|
||||||
deferred.fire( jQuery , [ document ] ).done( function( doc ) {
|
deferred.resolveWith( jQuery , [ document ] ).done( function( doc ) {
|
||||||
ok( this === jQuery && arguments.length === 1 && doc === document , "Test fire context & args" );
|
ok( this === jQuery && arguments.length === 1 && doc === document , "Test fire context & args" );
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue