Fixes #8125. Status is set to 200 for requests with status 0 when location.protocol...
authorjaubourg <j@ubourg.net>
Tue, 1 Feb 2011 16:22:01 +0000 (17:22 +0100)
committerjaubourg <j@ubourg.net>
Tue, 1 Feb 2011 16:22:01 +0000 (17:22 +0100)
src/ajax/xhr.js
test/localfile.html [new file with mode: 0644]

index b820642..47cfc6c 100644 (file)
@@ -156,12 +156,14 @@ if ( jQuery.support.ajax ) {
                                                                        statusText = "";
                                                                }
 
-                                                               // Filter status for non standard behaviours
+                                                               // Filter status for non standard behaviors
                                                                status =
+                                                                       // Most browsers return 0 when it should be 200 for local files
                                                                        // Opera returns 0 when it should be 304
                                                                        // Webkit returns 0 for failing cross-domain no matter the real status
-                                                                       status === 0 ?
-                                                                               (
+                                                                       !status ?
+                                                                               // All: for local files, 0 is a success
+                                                                               ( location.protocol === "file:" ? 200 : (
                                                                                        // Webkit, Firefox: filter out faulty cross-domain requests
                                                                                        !s.crossDomain || statusText ?
                                                                                        (
@@ -172,7 +174,7 @@ if ( jQuery.support.ajax ) {
                                                                                        ) :
                                                                                        // We assume 302 but could be anything cross-domain related
                                                                                        302
-                                                                               ) :
+                                                                               ) ) :
                                                                                (
                                                                                        // IE sometimes returns 1223 when it should be 204 (see #1450)
                                                                                        status == 1223 ?
diff --git a/test/localfile.html b/test/localfile.html
new file mode 100644 (file)
index 0000000..8021631
--- /dev/null
@@ -0,0 +1,40 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr" id="html">
+<head>
+       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+       <title>jQuery Local File Test</title>
+       <!-- Includes -->
+       <script src="../src/core.js"></script>
+       <script src="../src/support.js"></script>
+       <script src="../src/data.js"></script>
+       <script src="../src/queue.js"></script>
+       <script src="../src/attributes.js"></script>
+       <script src="../src/event.js"></script>
+       <script src="../src/sizzle/sizzle.js"></script>
+       <script src="../src/sizzle-jquery.js"></script>
+       <script src="../src/traversing.js"></script>
+       <script src="../src/manipulation.js"></script>
+       <script src="../src/css.js"></script>
+       <script src="../src/ajax.js"></script>
+       <script src="../src/ajax/jsonp.js"></script>
+       <script src="../src/ajax/script.js"></script>
+       <script src="../src/ajax/xhr.js"></script>
+       <script src="../src/effects.js"></script>
+       <script src="../src/offset.js"></script>
+       <script src="../src/dimensions.js"></script>
+</head>
+
+<body>
+       <script>
+       jQuery.ajax( "data/badjson.js" , {
+               dataType: "text"
+       }).success(function() {
+               $( "<div/>" ).text( "Success OK" ).appendTo( "body" );
+       });
+       jQuery.ajax( "data/doesnotexist.ext" , {
+               dataType: "text"
+       }).error(function() {
+               $( "<div/>" ).text( "Error OK" ).appendTo( "body" );
+       });
+       </script>
+</body>
\ No newline at end of file