X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fajax.js;h=915bbaa3e73d987799437bf2ee293031f515ea54;hb=3b50eaca2cd0b1439235e39c4e98a6438e8f55b2;hp=e6154806808093afcd5e84df95a2ecde89b3ae23;hpb=873c28425fb64fdb48cfa09d17041bded39b301f;p=jquery.git diff --git a/src/ajax.js b/src/ajax.js index e615480..915bbaa 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -208,6 +208,12 @@ jQuery.extend({ s.data = jQuery.param( s.data, s.traditional ); } + // If the jsonpCallback has been set, we can assume that dataType is jsonp + // Ticket #5803 + if ( s.jsonpCallback ) { + s.dataType = "jsonp"; + } + // Handle JSONP Parameter Callbacks if ( s.dataType === "jsonp" ) { if ( type === "GET" ) { @@ -239,10 +245,6 @@ jQuery.extend({ var customJsonp = window[ jsonp ]; window[ jsonp ] = function( tmp ) { - data = tmp; - jQuery.ajax.handleSuccess( s, xhr, status, data ); - jQuery.ajax.handleComplete( s, xhr, status, data ); - if ( jQuery.isFunction( customJsonp ) ) { customJsonp( tmp ); @@ -254,6 +256,10 @@ jQuery.extend({ delete window[ jsonp ]; } catch( jsonpError ) {} } + + data = tmp; + jQuery.handleSuccess( s, xhr, status, data ); + jQuery.handleComplete( s, xhr, status, data ); if ( head ) { head.removeChild( script ); @@ -281,7 +287,7 @@ jQuery.extend({ } // Watch for a new set of requests - if ( s.global && jQuery.ajax.active++ === 0 ) { + if ( s.global && jQuery.active++ === 0 ) { jQuery.event.trigger( "ajaxStart" ); } @@ -308,8 +314,8 @@ jQuery.extend({ if ( !done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") ) { done = true; - jQuery.ajax.handleSuccess( s, xhr, status, data ); - jQuery.ajax.handleComplete( s, xhr, status, data ); + jQuery.handleSuccess( s, xhr, status, data ); + jQuery.handleComplete( s, xhr, status, data ); // Handle memory leak in IE script.onload = script.onreadystatechange = null; @@ -358,8 +364,8 @@ jQuery.extend({ xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]); } - if ( jQuery.ajax.etag[s.url] ) { - xhr.setRequestHeader("If-None-Match", jQuery.ajax.etag[s.url]); + if ( jQuery.etag[s.url] ) { + xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]); } } @@ -378,7 +384,7 @@ jQuery.extend({ // Allow custom headers/mimetypes and early abort if ( s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false ) { // Handle the global AJAX counter - if ( s.global && jQuery.ajax.active-- === 1 ) { + if ( s.global && jQuery.active-- === 1 ) { jQuery.event.trigger( "ajaxStop" ); } @@ -388,7 +394,7 @@ jQuery.extend({ } if ( s.global ) { - jQuery.ajax.triggerGlobal( s, "ajaxSend", [xhr, s] ); + jQuery.triggerGlobal( s, "ajaxSend", [xhr, s] ); } // Wait for a response to come back @@ -398,7 +404,7 @@ jQuery.extend({ // Opera doesn't call onreadystatechange before this point // so we simulate the call if ( !requestDone ) { - jQuery.ajax.handleComplete( s, xhr, status, data ); + jQuery.handleComplete( s, xhr, status, data ); } requestDone = true; @@ -413,9 +419,9 @@ jQuery.extend({ status = isTimeout === "timeout" ? "timeout" : - !jQuery.ajax.httpSuccess( xhr ) ? + !jQuery.httpSuccess( xhr ) ? "error" : - s.ifModified && jQuery.ajax.httpNotModified( xhr, s.url ) ? + s.ifModified && jQuery.httpNotModified( xhr, s.url ) ? "notmodified" : "success"; @@ -425,7 +431,7 @@ jQuery.extend({ // Watch for, and catch, XML document parse errors try { // process the data (runs the xml through httpData regardless of callback) - data = jQuery.ajax.httpData( xhr, s.dataType, s ); + data = jQuery.httpData( xhr, s.dataType, s ); } catch( parserError ) { status = "parsererror"; errMsg = parserError; @@ -436,15 +442,15 @@ jQuery.extend({ if ( status === "success" || status === "notmodified" ) { // JSONP handles its own success callback if ( !jsonp ) { - jQuery.ajax.handleSuccess( s, xhr, status, data ); + jQuery.handleSuccess( s, xhr, status, data ); } } else { - jQuery.ajax.handleError( s, xhr, status, errMsg ); + jQuery.handleError( s, xhr, status, errMsg ); } // Fire the complete handlers if ( !jsonp ) { - jQuery.ajax.handleComplete( s, xhr, status, data ); + jQuery.handleComplete( s, xhr, status, data ); } if ( isTimeout === "timeout" ) { @@ -458,12 +464,14 @@ jQuery.extend({ } }; - // Override the abort handler, if we can (IE doesn't allow it, but that's OK) + // Override the abort handler, if we can (IE 6 doesn't allow it, but that's OK) // Opera doesn't fire onreadystatechange at all on abort try { var oldAbort = xhr.abort; xhr.abort = function() { - if ( xhr ) { + // xhr.abort in IE7 is not a native JS function + // and does not have a call property + if ( xhr && oldAbort.call ) { oldAbort.call( xhr ); } @@ -486,10 +494,10 @@ jQuery.extend({ xhr.send( noContent || s.data == null ? null : s.data ); } catch( sendError ) { - jQuery.ajax.handleError( s, xhr, null, sendError ); + jQuery.handleError( s, xhr, null, sendError ); // Fire the complete handlers - jQuery.ajax.handleComplete( s, xhr, status, data ); + jQuery.handleComplete( s, xhr, status, data ); } // firefox 1.5 doesn't fire statechange for sync requests @@ -572,7 +580,9 @@ function buildParams( prefix, obj, traditional, add ) { } } -jQuery.extend( jQuery.ajax, { +// This is still on the jQuery object... for now +// Want to move this to jQuery.ajax some day +jQuery.extend({ // Counter for holding the number of active queries active: 0, @@ -589,7 +599,7 @@ jQuery.extend( jQuery.ajax, { // Fire the global callback if ( s.global ) { - jQuery.ajax.triggerGlobal( s, "ajaxError", [xhr, s, e] ); + jQuery.triggerGlobal( s, "ajaxError", [xhr, s, e] ); } }, @@ -601,7 +611,7 @@ jQuery.extend( jQuery.ajax, { // Fire the global callback if ( s.global ) { - jQuery.ajax.triggerGlobal( s, "ajaxSuccess", [xhr, s] ); + jQuery.triggerGlobal( s, "ajaxSuccess", [xhr, s] ); } }, @@ -613,11 +623,11 @@ jQuery.extend( jQuery.ajax, { // The request was completed if ( s.global ) { - jQuery.ajax.triggerGlobal( s, "ajaxComplete", [xhr, s] ); + jQuery.triggerGlobal( s, "ajaxComplete", [xhr, s] ); } // Handle the global AJAX counter - if ( s.global && jQuery.ajax.active-- === 1 ) { + if ( s.global && jQuery.active-- === 1 ) { jQuery.event.trigger( "ajaxStop" ); } }, @@ -644,11 +654,11 @@ jQuery.extend( jQuery.ajax, { etag = xhr.getResponseHeader("Etag"); if ( lastModified ) { - jQuery.ajax.lastModified[url] = lastModified; + jQuery.lastModified[url] = lastModified; } if ( etag ) { - jQuery.ajax.etag[url] = etag; + jQuery.etag[url] = etag; } return xhr.status === 304; @@ -698,19 +708,16 @@ if ( window.ActiveXObject ) { if ( window.location.protocol !== "file:" ) { try { return new window.XMLHttpRequest(); - } catch(e) {} + } catch(xhrError) {} } try { return new window.ActiveXObject("Microsoft.XMLHTTP"); - } catch(e) {} + } catch(activeError) {} }; } // Does this browser support XHR requests? jQuery.support.ajax = !!jQuery.ajaxSettings.xhr(); -// For backwards compatibility -jQuery.extend( jQuery.ajax ); - })( jQuery );