Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Fixes #5856. Adds document protocol at the beginning of URLs without …
…protocol (thanks go to skrings for the initial pull request). Simplifies cross-domain detection regexp and logic as a consequence. Also took the opportunity to remove an unused variable. Unit test added.
Loading branch information
Showing
2 changed files
with
20 additions
and
11 deletions .
+8
−11
src/ajax.js
+12
−0
test/unit/ajax.js
@@ -7,15 +7,13 @@ var r20 = /%20/g,
rheaders = /^ ( .* ?) :\s * ( .* ?) \r ?$ /mg , // IE leaves an \r character at EOL
rinput = /^ (?: color| date| datetime| email| hidden| month| number| password| range| search| tel| text| time| url| week) $ /i ,
rnoContent = /^ (?: GET| HEAD) $ / ,
rprotocol = /^ \/ \/ / ,
rquery = /\? / ,
rscript = /<script\b [ ^<] * (?: (? ! <\/ script>) <[ ^<] * ) * <\/ script>/gi ,
rselectTextarea = /^ (?: select| textarea) /i ,
rspacesAjax = /\s + / ,
rts = /( [ ?&] ) _=[ ^&] * / ,
rurl = /^ ( \w + :) ?\/ \/ ( [ ^\/ ?#:] + ) (?: :( \d + ) ) ?/ ,
// Slice function
sliceFunc = Array . prototype . slice ,
rurl = /^ ( \w + :) \/ \/ ( [ ^\/ ?#:] + ) (?: :( \d + ) ) ?/ ,
// Keep a copy of the old load method
_load = jQuery . fn . load ,
@@ -544,21 +542,20 @@ jQuery.extend({
} ;
// Remove hash character (#7531: and string promotion)
// Add protocol if not provided (#5856: IE7 issue with protocol-less urls)
// We also use the url parameter if available
s . url = ( "" + ( url || s . url ) ) . replace ( rhash , "" ) ;
s . url = ( "" + ( url || s . url ) ) . replace ( rhash , "" ) . replace ( rprotocol , protocol + "//" ) ;
// Extract dataTypes list
s . dataTypes = jQuery . trim ( s . dataType || "*" ) . toLowerCase ( ) . split ( rspacesAjax ) ;
// Determine if a cross-domain request is in order
if ( !s . crossDomain ) {
parts = rurl . exec ( s . url . toLowerCase ( ) ) ;
s . crossDomain = !!(
parts &&
( parts [ 1 ] && parts [ 1 ] != protocol ||
parts [ 2 ] != loc . hostname ||
( parts [ 3 ] || ( ( parts [ 1 ] || protocol ) === "http:" ? 80 : 443 ) ) !=
( loc . port || ( protocol === "http:" ? 80 : 443 ) ) )
s . crossDomain = !!( parts &&
( parts [ 1 ] != protocol || parts [ 2 ] != loc . hostname ||
( parts [ 3 ] || ( parts [ 1 ] === "http:" ? 80 : 443 ) ) !=
( loc . port || ( protocol === "http:" ? 80 : 443 ) ) )
) ;
}
@@ -415,6 +415,18 @@ test(".ajax() - contentType" , function() {
} ) ;
test ( ".ajax() - protocol-less urls" , function ( ) {
expect ( 1 ) ;
jQuery . ajax ( {
url : "//somedomain.com" ,
beforeSend : function ( xhr , settings ) {
equals ( settings . url , location . protocol + "//somedomain.com" , "Make sure that the protocol is added." ) ;
return false ;
}
} ) ;
} ) ;
test ( ".ajax() - hash" , function ( ) {
expect ( 3 ) ;
Toggle all file notes