phonegap+iOS,http请求在本地文件上总是返回状态0

phonegap + iOS, http request always return status 0 on local files

本文关键字:返回 状态 文件 http 请求 phonegap+iOS      更新时间:2023-09-26

我使用的是Phonegap 3.3.0,在iOS上,无论文件是否存在,以下http请求总是返回0!!

var url = './images/pros/imagefile.png'; 
var http = new XMLHttpRequest(); 
http.open('HEAD', url, false); 
http.send(); 
http.status 

如果文件存在,它会返回0,但如果我尝试了一个错误的网址:

var url = 'httpbabla/images/pros/imagefile.pngfkjdqmkfjdmqsl'; 

var url = 'www/images/pros/imagefidddddddle.pngooijijijiojs'; 

它仍然返回0。

这是电话漏洞吗?如果没有,那么如何使用Phonegap和iOS快速区分现有的本地文件和未存在的文件?

感谢

使用异步请求和onloadonerror处理程序可能会更好。注意使用true参数作为http.open:的最后一个参数

var url = 'file:///does/not/exist.jpg'; 
var http = new XMLHttpRequest(); 
http.open('HEAD', url, true); 
http.onload = function(e){/* Success! File exists; process the response... */};
http.onerror = function(e){/* Failed - file does not exist - do whatever needs to be done... */};
http.send(); 

一旦您调用http.send,您的功能将完成,控制权将返回给调用者。无论是成功还是失败,都需要在onloadonerror回调中处理。如果你不熟悉Javascript回调(和闭包),花点时间学习如何使用它们——它们是该语言中最强大的功能之一。

这对我有效:

    function UrlExists(url)
{
    if ( isPhoneGap && isIOS() ) {
        if (url.fileExists()){ //see prototype below
            return true;
        }else {
            return false;
        }
    } else {
        try {
            http = new XMLHttpRequest();
            http.open("HEAD", url, false);
            http.send();
        }
        catch (err) {
            //alert("An error:" + err.name + "---" + err.message);
        }
        //return http.status!=404;
        if (http.readyState == 4) {
            console.log("http.status="+http.status);
            return http.status==200 || http.status==0;
        }
    }
}
// check local file existance for iOS
String.prototype.fileExists = function() {
    filename = this.trim();
    var response = jQuery.ajax({
        url: filename,
        type: 'HEAD',
        async: false
    }).status;  
    return (response != "200") ? false : true;
}