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.

This commit is contained in:
John Resig 2009-07-14 21:13:23 +00:00
parent 89dc1e0143
commit c3c94823f2
4 changed files with 30 additions and 8 deletions

View file

@ -455,7 +455,8 @@ jQuery.extend({
try { try {
// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450 // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
return !xhr.status && location.protocol == "file:" || 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){} } catch(e){}
return false; return false;
}, },
@ -471,7 +472,8 @@ jQuery.extend({
if (etag) if (etag)
jQuery.etag[url] = 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 ) { httpData: function( xhr, type, s ) {

View file

@ -11,6 +11,11 @@ if ($ifNoneMatch == $etag) {
} }
header("Etag: " . $etag); header("Etag: " . $etag);
echo "OK: " . $etag;
if ( $ifNoneMatch ) {
echo "OK: " . $etag;
} else {
echo "FAIL";
}
?> ?>

View file

@ -10,6 +10,11 @@ if ($ifModifiedSince == $ts) {
} }
header("Last-Modified: " . $ts); header("Last-Modified: " . $ts);
echo "OK: " . $ts;
if ( $ifModifiedSince ) {
echo "OK: " . $ts;
} else {
echo "FAIL";
}
?> ?>

View file

@ -891,8 +891,13 @@ test("jQuery.ajax - If-Modified-Since support", function() {
url: url, url: url,
ifModified: true, ifModified: true,
success: function(data, status) { success: function(data, status) {
equals(status, "notmodified"); if ( data === "FAIL" ) {
ok(data == null, "response body should be empty") 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(); start();
} }
}); });
@ -917,8 +922,13 @@ test("jQuery.ajax - Etag support", function() {
url: url, url: url,
ifModified: true, ifModified: true,
success: function(data, status) { success: function(data, status) {
equals(status, "notmodified"); if ( data === "FAIL" ) {
ok(data == null, "response body should be empty") 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(); start();
} }
}); });