我正在使用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快速区分现有的本地文件和未存在的文件?
由于
答案 0 :(得分:0)
对于异步请求以及onload
和onerror
处理程序,您可能会更幸运。请注意使用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
后,您的功能将完成,控制权将返回给来电者。无论您在成功还是失败时需要处理哪些处理,都需要在onload
和onerror
回调中进行处理。如果你不熟悉它们,请花时间学习如何使用Javascript回调(和闭包) - 它们是该语言中最强大的功能之一。
答案 1 :(得分:0)
这对我有用:
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;
}