completeDeferred = jQuery._Deferred(),
// Status-dependent callbacks
statusCode = s.statusCode || {},
+ // ifModified key
+ ifModifiedKey,
// Headers (they are sent all at once)
requestHeaders = {},
// Response headers
if ( s.ifModified ) {
if ( ( lastModified = jXHR.getResponseHeader( "Last-Modified" ) ) ) {
- jQuery.lastModified[ s.url ] = lastModified;
+ jQuery.lastModified[ ifModifiedKey ] = lastModified;
}
if ( ( etag = jXHR.getResponseHeader( "Etag" ) ) ) {
- jQuery.etag[ s.url ] = etag;
+ jQuery.etag[ ifModifiedKey ] = etag;
}
}
s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
}
+ // Get ifModifiedKey before adding the anti-cache parameter
+ ifModifiedKey = s.url;
+
// Add anti-cache in url if needed
if ( s.cache === false ) {
// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
if ( s.ifModified ) {
- if ( jQuery.lastModified[ s.url ] ) {
- requestHeaders[ "if-modified-since" ] = jQuery.lastModified[ s.url ];
+ ifModifiedKey = ifModifiedKey || s.url;
+ if ( jQuery.lastModified[ ifModifiedKey ] ) {
+ requestHeaders[ "if-modified-since" ] = jQuery.lastModified[ ifModifiedKey ];
}
- if ( jQuery.etag[ s.url ] ) {
- requestHeaders[ "if-none-match" ] = jQuery.etag[ s.url ];
+ if ( jQuery.etag[ ifModifiedKey ] ) {
+ requestHeaders[ "if-none-match" ] = jQuery.etag[ ifModifiedKey ];
}
}
});
});
-test("jQuery.ajax - If-Modified-Since support", function() {
- expect( 3 );
+var ifModifiedNow = new Date();
- stop();
+jQuery.each( { " (cache)": true, " (no cache)": false }, function( label, cache ) {
- var url = "data/if_modified_since.php?ts=" + new Date();
+ test("jQuery.ajax - If-Modified-Since support" + label, function() {
+ expect( 3 );
- jQuery.ajax({
- url: url,
- ifModified: true,
- success: function(data, status) {
- equals(status, "success");
+ stop();
- jQuery.ajax({
- url: url,
- ifModified: true,
- success: function(data, status) {
- if ( data === "FAIL" ) {
- ok(true, "Opera is incapable of doing .setRequestHeader('If-Modified-Since').");
- ok(true, "Opera is incapable of doing .setRequestHeader('If-Modified-Since').");
- } else {
- equals(status, "notmodified");
- ok(data == null, "response body should be empty");
+ var url = "data/if_modified_since.php?ts=" + ifModifiedNow++;
+
+ jQuery.ajax({
+ url: url,
+ ifModified: true,
+ cache: cache,
+ success: function(data, status) {
+ equals(status, "success" );
+
+ jQuery.ajax({
+ url: url,
+ ifModified: true,
+ cache: cache,
+ success: function(data, status) {
+ if ( data === "FAIL" ) {
+ ok(jQuery.browser.opera, "Opera is incapable of doing .setRequestHeader('If-Modified-Since').");
+ ok(jQuery.browser.opera, "Opera is incapable of doing .setRequestHeader('If-Modified-Since').");
+ } else {
+ equals(status, "notmodified");
+ ok(data == null, "response body should be empty");
+ }
+ start();
+ },
+ error: function() {
+ // Do this because opera simply refuses to implement 304 handling :(
+ // A feature-driven way of detecting this would be appreciated
+ // See: http://gist.github.com/599419
+ ok(jQuery.browser.opera, "error");
+ ok(jQuery.browser.opera, "error");
+ start();
}
- start();
- },
- error: function() {
- // Do this because opera simply refuses to implement 304 handling :(
- // A feature-driven way of detecting this would be appreciated
- // See: http://gist.github.com/599419
- ok(jQuery.browser.opera, "error");
- ok(jQuery.browser.opera, "error");
- start();
- }
- });
- },
- error: function() {
- equals(false, "error");
- // Do this because opera simply refuses to implement 304 handling :(
- // A feature-driven way of detecting this would be appreciated
- // See: http://gist.github.com/599419
- ok(jQuery.browser.opera, "error");
- start();
- }
+ });
+ },
+ error: function() {
+ equals(false, "error");
+ // Do this because opera simply refuses to implement 304 handling :(
+ // A feature-driven way of detecting this would be appreciated
+ // See: http://gist.github.com/599419
+ ok(jQuery.browser.opera, "error");
+ start();
+ }
+ });
});
-});
-test("jQuery.ajax - Etag support", function() {
- expect( 3 );
+ test("jQuery.ajax - Etag support" + label, function() {
+ expect( 3 );
- stop();
+ stop();
- var url = "data/etag.php?ts=" + new Date();
+ var url = "data/etag.php?ts=" + ifModifiedNow++;
- jQuery.ajax({
- url: url,
- ifModified: true,
- success: function(data, status) {
- equals(status, "success");
+ jQuery.ajax({
+ url: url,
+ ifModified: true,
+ cache: cache,
+ success: function(data, status) {
+ equals(status, "success" );
- jQuery.ajax({
- url: url,
- ifModified: true,
- success: function(data, status) {
- if ( data === "FAIL" ) {
- ok(true, "Opera is incapable of doing .setRequestHeader('If-None-Match').");
- ok(true, "Opera is incapable of doing .setRequestHeader('If-None-Match').");
- } else {
- equals(status, "notmodified");
- ok(data == null, "response body should be empty");
+ jQuery.ajax({
+ url: url,
+ ifModified: true,
+ cache: cache,
+ success: function(data, status) {
+ if ( data === "FAIL" ) {
+ ok(jQuery.browser.opera, "Opera is incapable of doing .setRequestHeader('If-None-Match').");
+ ok(jQuery.browser.opera, "Opera is incapable of doing .setRequestHeader('If-None-Match').");
+ } else {
+ equals(status, "notmodified");
+ ok(data == null, "response body should be empty");
+ }
+ start();
+ },
+ error: function() {
+ // Do this because opera simply refuses to implement 304 handling :(
+ // A feature-driven way of detecting this would be appreciated
+ // See: http://gist.github.com/599419
+ ok(jQuery.browser.opera, "error");
+ ok(jQuery.browser.opera, "error");
+ start();
}
- start();
- },
- error: function() {
- // Do this because opera simply refuses to implement 304 handling :(
- // A feature-driven way of detecting this would be appreciated
- // See: http://gist.github.com/599419
- ok(jQuery.browser.opera, "error");
- ok(jQuery.browser.opera, "error");
- start();
- }
- });
- },
- error: function() {
- // Do this because opera simply refuses to implement 304 handling :(
- // A feature-driven way of detecting this would be appreciated
- // See: http://gist.github.com/599419
- ok(jQuery.browser.opera, "error");
- start();
- }
+ });
+ },
+ error: function() {
+ // Do this because opera simply refuses to implement 304 handling :(
+ // A feature-driven way of detecting this would be appreciated
+ // See: http://gist.github.com/599419
+ ok(jQuery.browser.opera, "error");
+ start();
+ }
+ });
});
});