From cd4ad00478fd02dc04043e9eafc70b2e73e05c87 Mon Sep 17 00:00:00 2001 From: Dave Methvin Date: Fri, 29 Jul 2016 15:50:07 -0400 Subject: [PATCH] Ajax: Don't mangle the URL when removing the anti-cache param Fixes gh-3229 Closes gh-3253 --- src/ajax.js | 6 +++--- test/unit/ajax.js | 28 +++++++++++++++++++--------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/ajax.js b/src/ajax.js index 85b08546f..f8ec21898 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -18,7 +18,7 @@ define( [ var r20 = /%20/g, rhash = /#.*$/, - rts = /([?&])_=[^&]*/, + rantiCache = /([?&])_=[^&]*/, rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, // #7653, #8125, #8152: local protocol detection @@ -604,9 +604,9 @@ jQuery.extend( { delete s.data; } - // Add anti-cache in uncached url if needed + // Add or update anti-cache param if needed if ( s.cache === false ) { - cacheURL = cacheURL.replace( rts, "" ); + cacheURL = cacheURL.replace( rantiCache, "$1" ); uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; } diff --git a/test/unit/ajax.js b/test/unit/ajax.js index 5e24c3049..5a3bd32d2 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -828,8 +828,9 @@ QUnit.module( "ajax", { } ), "generic" ); } ); - ajaxTest( "jQuery.ajax() - cache", 12, function( assert ) { - var re = /_=(.*?)(&|$)/g; + ajaxTest( "jQuery.ajax() - cache", 28, function( assert ) { + var re = /_=(.*?)(&|$)/g, + rootUrl = "data/text.php"; function request( url, title ) { return { @@ -837,6 +838,11 @@ QUnit.module( "ajax", { cache: false, beforeSend: function() { var parameter, tmp; + + // URL sanity check + assert.equal( this.url.indexOf( rootUrl ), 0, "root url not mangled: " + this.url ); + assert.equal( /\&.*\?/.test( this.url ), false, "parameter delimiters in order" ); + while ( ( tmp = re.exec( this.url ) ) ) { assert.strictEqual( parameter, undefined, title + ": only one 'no-cache' parameter" ); parameter = tmp[ 1 ]; @@ -850,27 +856,31 @@ QUnit.module( "ajax", { return [ request( - "data/text.php", - "no parameter" + rootUrl, + "no query" + ), + request( + rootUrl + "?", + "empty query" ), request( - "data/text.php?pizza=true", + rootUrl + "?pizza=true", "1 parameter" ), request( - "data/text.php?_=tobereplaced555", + rootUrl + "?_=tobereplaced555", "_= parameter" ), request( - "data/text.php?pizza=true&_=tobereplaced555", + rootUrl + "?pizza=true&_=tobereplaced555", "1 parameter and _=" ), request( - "data/text.php?_=tobereplaced555&tv=false", + rootUrl + "?_=tobereplaced555&tv=false", "_= and 1 parameter" ), request( - "data/text.php?name=David&_=tobereplaced555&washere=true", + rootUrl + "?name=David&_=tobereplaced555&washere=true", "2 parameters surrounding _=" ) ]; -- 2.39.5