From e83fcdcb02d676d91d764a58f7e8d2eb1c95de69 Mon Sep 17 00:00:00 2001 From: jaubourg Date: Fri, 1 Jul 2011 02:11:26 +0200 Subject: [PATCH] Fixes #9682. Removes data from the options for request with no content so that it is not used again in case of a retry. Unit test added. --- src/ajax.js | 2 ++ test/unit/ajax.js | 25 ++++++++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/ajax.js b/src/ajax.js index e4e48dc7..650f3318 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -644,6 +644,8 @@ jQuery.extend({ // If data is available, append data to url if ( s.data ) { s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data; + // #9682: remove data so that it's not used in an eventual retry + delete s.data; } // Get ifModifiedKey before adding the anti-cache parameter diff --git a/test/unit/ajax.js b/test/unit/ajax.js index 9f084136..33433922 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -321,25 +321,40 @@ test("jQuery.ajax() - responseText on error", function() { test(".ajax() - retry with jQuery.ajax( this )", function() { - expect( 1 ); + expect( 2 ); stop(); - var firstTime = 1; + var firstTime = true, + previousUrl; jQuery.ajax({ url: url("data/errorWithText.php"), error: function() { if ( firstTime ) { - firstTime = 0; + firstTime = false; jQuery.ajax( this ); } else { ok( true , "Test retrying with jQuery.ajax(this) works" ); - start(); + jQuery.ajax({ + url: url("data/errorWithText.php"), + data: { x: 1 }, + beforeSend: function() { + if ( !previousUrl ) { + previousUrl = this.url; + } else { + strictEqual( this.url , previousUrl, "url parameters are not re-appended" ); + start(); + return false; + } + }, + error: function() { + jQuery.ajax( this ); + } + }); } } }); - }); test(".ajax() - headers" , function() {