X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fajax.js;h=6a757eb116febd4ffdde5bd2ae94247c8dd9c893;hb=09022e0b09db71259751e7146bb64727615028af;hp=08dc4431a7e9b9d40d624d9f24323183495b9781;hpb=d2e64979bf641181443a8e6456f6292973a7fa9a;p=jquery.git diff --git a/src/ajax.js b/src/ajax.js index 08dc443..6a757eb 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -4,7 +4,7 @@ var jsc = jQuery.now(), rscript = /)<[^<]*)*<\/script>/gi, rselectTextarea = /^(?:select|textarea)/i, rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, - rnoContent = /^(?:GET|HEAD|DELETE)$/, + rnoContent = /^(?:GET|HEAD)$/, rbracket = /\[\]$/, jsre = /\=\?(&|$)/, rquery = /\?/, @@ -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 ); @@ -265,7 +271,7 @@ jQuery.extend({ s.cache = false; } - if ( s.cache === false && type === "GET" ) { + if ( s.cache === false && noContent ) { var ts = jQuery.now(); // try replacing _= if it is there @@ -275,13 +281,13 @@ jQuery.extend({ s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : ""); } - // If data is available, append data to url for get requests - if ( s.data && type === "GET" ) { + // If data is available, append data to url for GET/HEAD requests + if ( s.data && noContent ) { s.url += (rquery.test(s.url) ? "&" : "?") + s.data; } // 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" ) { @@ -488,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 @@ -574,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, @@ -591,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] ); } }, @@ -603,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] ); } }, @@ -615,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" ); } }, @@ -646,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; @@ -700,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 );