diff --git a/src/ajax.js b/src/ajax.js index 394c84e66..3f71f8c6e 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -247,6 +247,7 @@ jQuery.extend({ target = jQuery.ajaxSettings; } ajaxExtend( target, settings ); + return target; }, @@ -557,8 +558,9 @@ jQuery.extend({ // Remove hash character (#7531: and string promotion) // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) + // Handle falsy url in the settings object (#10093: consistency with old signature) // We also use the url parameter if available - s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); + s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); // Extract dataTypes list s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace ); diff --git a/test/unit/ajax.js b/test/unit/ajax.js index d11cb13f7..4a93c65fe 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -1451,7 +1451,7 @@ if ( jQuery.ajax && ( !isLocal || hasPHP ) ) { jQuery.each( [ "Same Domain", "Cross Domain" ], function( crossDomain, label ) { - + asyncTest( "jQuery.ajax() - JSONP, Query String (?n)" + label, function() { expect( 4 ); @@ -1543,7 +1543,7 @@ if ( jQuery.ajax && ( !isLocal || hasPHP ) ) { plus(); } }); - + window["jsonpResults"] = function( data ) { ok( data["data"], "JSON results returned (GET, custom callback function)" ); window["jsonpResults"] = undefined; @@ -2725,4 +2725,38 @@ if ( jQuery.ajax && ( !isLocal || hasPHP ) ) { expect( 1 ); ok( jQuery.active === 0, "ajax active counter should be zero: " + jQuery.active ); }); + + test("jQuery.ajax - falsy url as argument (#10093)", function() { + expect( 4 ); + + jQuery.ajaxSetup({ timeout: 0 }); + + stop(); + + jQuery.when( + jQuery.ajax("").success(function(){ ok( true, "settings object - empty string" ); }), + jQuery.ajax( false ).success(function(){ ok( true, "false" ); }), + jQuery.ajax( null ).success(function(){ ok( true, "null" ); }), + jQuery.ajax( undefined ).success(function(){ ok( true, "undefined" ); }) + ).always(function () { + start(); + }); + }); + + test("jQuery.ajax - falsy url in settings object (#10093)", function() { + expect( 4 ); + + jQuery.ajaxSetup({ timeout: 0 }); + + stop(); + + jQuery.when( + jQuery.ajax({ url: "" }).success(function(){ ok( true, "settings object - empty string" ); }), + jQuery.ajax({ url: false }).success(function(){ ok( true, "false" ); }), + jQuery.ajax({ url: null }).success(function(){ ok( true, "null" ); }), + jQuery.ajax({ url: undefined }).success(function(){ ok( true, "undefined" ); }) + ).always(function () { + start(); + }); + }); }