Skip to content
Browse files
Fixes #8125. Status is set to 200 for requests with status 0 when loc…
…ation.protocol if "file:". Added test/localfile.html to control it works.
  • Loading branch information
jaubourg committed Feb 1, 2011
1 parent cb49b4a commit cb85da7b62e74e7339ed652ade209aaffbd0c15b
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 4 deletions.
@@ -156,12 +156,14 @@ if ( ) {
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 ( ) {
) :
// We assume 302 but could be anything cross-domain related
) :
) ) :
// IE sometimes returns 1223 when it should be 204 (see #1450)
status == 1223 ?
@@ -0,0 +1,40 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
<html xmlns="" xml:lang="en" lang="en" dir="ltr" id="html">
<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>

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" );

3 comments on commit cb85da7

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey Julian,
Do you know if this change ended up making it into 1.5.1 final? jQuery Mobile users have been unable to use jQM with Phonegap since jQuery 1.4.4 because of the file:// issue that this fix seems to address, but it doesn't look like the latest version of jQuery core makes it better.

Any info you have on this would be great help.
We've got a thread going here:

BTW: there seems to be a separate more minor regression as well in that the success callback didn't always return an HTML dataType when it should, but Kin was able to work around that one temporarily in jQuery Mobile (noted here: )

Thanks so much!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

to make this clear: with jquery 1.5.1 the ajax call itself works. so that is not the problem .the content loads fine. this seems not the problem with ajax call. an ajax call should work if the origin page was opened via file://. at least in this case i found the problem.
as far as i see it the problem lies in jquery mobile. there is an isExternal check, to see whether it is an internal or an external page call. only in the case of an internal call jqm does page transitions and inserts the conent into the dom of the page. so only in case of internal it acts and feels like an iphone app. with external call there is a new page loaded.
i have patched the isExternal check in jquerymobile. with my patch the app in phonegap works. we maybe have to check, whether other things still works. we use a kind of limited webapp/phonegap app, so my patch works for me.


Please sign in to comment.