Moved unload abort code so that the event is only bound if the xhr transport is used...
[jquery.git] / src / ajax.js
index d78542d..dbea8d5 100644 (file)
@@ -10,7 +10,7 @@ var r20 = /%20/g,
        rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
        rselectTextarea = /^(?:select|textarea)/i,
        rts = /([?&])_=[^&]*/,
-       rurl = /^(\w+:)?\/\/([^\/?#]+)/,
+       rurl = /^(\w+:)?\/\/([^\/?#:]+)(?::(\d+))?/,
 
        // Slice function
        sliceFunc = Array.prototype.slice,
@@ -464,6 +464,11 @@ jQuery.extend({
                        } else { // if not success, mark it as an error
 
                                        error = error || statusText;
+
+                                       // Set responseText if needed
+                                       if ( response ) {
+                                               jXHR.responseText = response;
+                                       }
                        }
 
                        // Set data for the fake xhr object
@@ -496,9 +501,9 @@ jQuery.extend({
 
                // Attach deferreds
                deferred.promise( jXHR );
-               jXHR.success = jXHR.complete;
+               jXHR.success = jXHR.done;
                jXHR.error = jXHR.fail;
-               jXHR.complete = completeDeferred.complete;
+               jXHR.complete = completeDeferred.done;
 
                // Remove hash character (#7531: and string promotion)
                s.url = ( "" + s.url ).replace( rhash , "" );
@@ -515,21 +520,29 @@ jQuery.extend({
                // Determine if a cross-domain request is in order
                var parts = rurl.exec( s.url.toLowerCase() ),
                        loc = location;
-               s.crossDomain = !!( parts && ( parts[ 1 ] && parts[ 1 ] != loc.protocol || parts[ 2 ] != loc.host ) );
+
+               if ( ! s.crossDomain ) {
+                       s.crossDomain = !!(
+                                       parts &&
+                                       ( parts[ 1 ] && parts[ 1 ] != loc.protocol ||
+                                               parts[ 2 ] != loc.hostname ||
+                                               ( parts[ 3 ] || 80 ) != ( loc.port || 80 ) )
+                       );
+               }
 
                // Convert data if not already a string
                if ( s.data && s.processData && typeof s.data != "string" ) {
                        s.data = jQuery.param( s.data , s.traditional );
                }
 
+               // Get transport
+               transport = jQuery.ajax.prefilter( s , options ).transport( s );
+
                // Watch for a new set of requests
                if ( s.global && jQuery.active++ === 0 ) {
                        jQuery.event.trigger( "ajaxStart" );
                }
 
-               // Get transport
-               transport = jQuery.ajax.prefilter( s ).transport( s );
-
                // If no transport, we auto-abort
                if ( ! transport ) {
 
@@ -559,7 +572,7 @@ jQuery.extend({
                        }
 
                        // Set the correct header, if data is being sent
-                       if ( ( s.data && s.hasContent ) || options.contentType ) {
+                       if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
                                requestHeaders[ "content-type" ] = s.contentType;
                        }