X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fajax.js;h=bfae7824478b2090dcf5bfc3065519379e498c8d;hb=e3463946e19f2eb53d909fc2b59cc1c8636d21bd;hp=7cf280ab33ab60f94f0bbbfc358ffde1cac25857;hpb=b3ccf2f2881d9ad988aba1cf3ccffb810063ab29;p=jquery.git diff --git a/src/ajax.js b/src/ajax.js index 7cf280a..bfae782 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -1,3 +1,5 @@ +(function( jQuery ) { + var jsc = jQuery.now(), rscript = //gi, rselectTextarea = /select|textarea/i, @@ -237,17 +239,25 @@ jQuery.extend({ s.dataType = "script"; // Handle JSONP-style loading - window[ jsonp ] = window[ jsonp ] || function( tmp ) { + var customJsonp = window[ jsonp ]; + + window[ jsonp ] = function( tmp ) { data = tmp; jQuery.ajax.handleSuccess( s, xhr, status, data ); jQuery.ajax.handleComplete( s, xhr, status, data ); - // Garbage collect - window[ jsonp ] = undefined; + + if ( jQuery.isFunction( customJsonp ) ) { + customJsonp( tmp ); - try { - delete window[ jsonp ]; - } catch( jsonpError ) {} + } else { + // Garbage collect + window[ jsonp ] = undefined; + try { + delete window[ jsonp ]; + } catch( jsonpError ) {} + } + if ( head ) { head.removeChild( script ); } @@ -436,7 +446,9 @@ jQuery.extend({ } // Fire the complete handlers - jQuery.ajax.handleComplete( s, xhr, status, data ); + if ( !jsonp ) { + jQuery.ajax.handleComplete( s, xhr, status, data ); + } if ( isTimeout === "timeout" ) { xhr.abort(); @@ -474,7 +486,7 @@ jQuery.extend({ // Send the data try { - xhr.send( type === "POST" || type === "PUT" || type === "DELETE" ? s.data : null ); + xhr.send( (type !== "GET" && s.data) || null ); } catch( sendError ) { jQuery.ajax.handleError( s, xhr, null, e ); @@ -617,9 +629,8 @@ jQuery.extend( jQuery.ajax, { try { // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450 return !xhr.status && location.protocol === "file:" || - // Opera returns 0 when status is 304 - ( xhr.status >= 200 && xhr.status < 300 ) || - xhr.status === 304 || xhr.status === 1223 || xhr.status === 0; + xhr.status >= 200 && xhr.status < 300 || + xhr.status === 304 || xhr.status === 1223; } catch(e) {} return false; @@ -638,8 +649,7 @@ jQuery.extend( jQuery.ajax, { jQuery.ajax.etag[url] = etag; } - // Opera returns 0 when status is 304 - return xhr.status === 304 || xhr.status === 0; + return xhr.status === 304; }, httpData: function( xhr, type, s ) { @@ -674,5 +684,10 @@ jQuery.extend( jQuery.ajax, { }); +// Does this browser support XHR requests? +jQuery.support.ajax = !!jQuery.ajaxSettings.xhr(); + // For backwards compatibility jQuery.extend( jQuery.ajax ); + +})( jQuery );