Merge branch 'master' of github.com:jquery/jquery

This commit is contained in:
jeresig 2011-01-20 11:58:52 -05:00
commit ea5ce8c2a9
5 changed files with 79 additions and 53 deletions

View file

@ -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+/ );

View file

@ -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);
} }
} }
}; };

View file

@ -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();
}); });

View file

@ -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,8 +1975,35 @@ 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() {

View file

@ -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" );
}); });
}); });