从文件存在检查返回未定义

时间:2015-05-18 05:11:36

标签: javascript xmlhttprequest

我正在通过XMLHttpRequest检查某个本地URL上的文件是否存在,这是对文件系统的一种解决方法。使用下面描述的pingFile函数,我会尝试查看给定文件的200404,并根据该结果执行某些操作。

function pingFile(theURL, callback)
{
    var req = new XMLHttpRequest();
    req.onreadystatechange = function() {
        if (this.readyState === this.DONE) {
            if (callback !== null) {
                return callback(this.status);
            } else {
                return this.status;
            }
        }
    };
    req.open("HEAD", theURL);
    req.send();
}

var q = pingFile('images/image1.png', null);

但是,当我检查q的值时,它总是undefined。我想,我在这里遗漏了一些XHR的异步特性,但是我无法找到等待的地方,以便this.status具有我期望的文件检查值。< / p>

编辑:我已尝试在return 4;之后添加req.send();,并且无论文件是否为q,都始终为4提供值status那里。

如何从其所在的函数中获取XMLHttpRequest的{​​{1}}值?

1 个答案:

答案 0 :(得分:0)

对于异步操作,您可以使用回调或承诺。这是一个回调的简单示例:

(function () {
    function pingFile(theURL, success, error) {
        var req = new XMLHttpRequest();
        req.onload = function (e) {
            if (this.status === 200) {
                success(e);
            } else {
                error(e);
            }
        };
        req.open("HEAD", theURL);
        req.send();
    }

    function fileExist(e) {
        alert('File exist!');
    }

    function fileNotExist(e) {
        alert('File does not exist!');
    }

    pingFile('images/image1.png', fileExist, fileNotExist);
}());