From c3c94823f27ee1e935586d46fd86f055f3a3d97d Mon Sep 17 00:00:00 2001 From: John Resig Date: Tue, 14 Jul 2009 21:13:23 +0000 Subject: [PATCH] Fixed the handling of .status == 304 in Opera (it always returns 0). Also silently "pass" in Opera 9.6 (which is unable to send the correct headers with setRequestHeader). Follow-up to bug #4764. --- src/ajax.js | 6 ++++-- test/data/etag.php | 7 ++++++- test/data/if_modified_since.php | 7 ++++++- test/unit/ajax.js | 18 ++++++++++++++---- 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/ajax.js b/src/ajax.js index 2365387dc..beed45fbf 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -455,7 +455,8 @@ jQuery.extend({ try { // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450 return !xhr.status && location.protocol == "file:" || - ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223; + // Opera returns 0 when status is 304 + ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223 || xhr.status == 0; } catch(e){} return false; }, @@ -471,7 +472,8 @@ jQuery.extend({ if (etag) jQuery.etag[url] = etag; - return xhr.status == 304; + // Opera returns 0 when status is 304 + return xhr.status == 304 || xhr.status == 0; }, httpData: function( xhr, type, s ) { diff --git a/test/data/etag.php b/test/data/etag.php index ad05ba8ad..7bcfcd1e6 100644 --- a/test/data/etag.php +++ b/test/data/etag.php @@ -11,6 +11,11 @@ if ($ifNoneMatch == $etag) { } header("Etag: " . $etag); -echo "OK: " . $etag; + +if ( $ifNoneMatch ) { + echo "OK: " . $etag; +} else { + echo "FAIL"; +} ?> diff --git a/test/data/if_modified_since.php b/test/data/if_modified_since.php index 013f446dc..e37a93e57 100644 --- a/test/data/if_modified_since.php +++ b/test/data/if_modified_since.php @@ -10,6 +10,11 @@ if ($ifModifiedSince == $ts) { } header("Last-Modified: " . $ts); -echo "OK: " . $ts; + +if ( $ifModifiedSince ) { + echo "OK: " . $ts; +} else { + echo "FAIL"; +} ?> diff --git a/test/unit/ajax.js b/test/unit/ajax.js index 5b5f95f06..92d0739fa 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -891,8 +891,13 @@ test("jQuery.ajax - If-Modified-Since support", function() { url: url, ifModified: true, success: function(data, status) { - equals(status, "notmodified"); - ok(data == null, "response body should be empty") + 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") + } start(); } }); @@ -917,8 +922,13 @@ test("jQuery.ajax - Etag support", function() { url: url, ifModified: true, success: function(data, status) { - equals(status, "notmodified"); - ok(data == null, "response body should be empty") + if ( data === "FAIL" ) { + ok(true, "Opera is incapable of doing .setRequestHeader('If-None-Matches')."); + ok(true, "Opera is incapable of doing .setRequestHeader('If-None-Matches')."); + } else { + equals(status, "notmodified"); + ok(data == null, "response body should be empty") + } start(); } });