XMLHTTPResponse.onload作用域中的变量未定义

时间:2014-01-16 01:40:29

标签: javascript file-upload xmlhttprequest onload

这很可能是我忽视的东西,但我无法弄清楚这种情况下究竟是什么问题。

Upload: function (callback) {
    var formData, xhr, file,
    xhrLoaded = function () {
        if (callback) {
            callback(this.status, this.response, file);
        }
    };

    if (this._files.length < 1) {
        return false;
    }

    file = this._files.pop();
    while (file) {
        formData = new FormData();
        formData.append("file", file);

        xhr = new XMLHttpRequest();
        xhr.open("POST", this.options.uploadUrl);
        xhr.onload = xhrLoaded;
        xhr.send(formData);
        file = this._files.pop();
    }
}

为什么xhr onload事件处理程序运行文件时未定义?起初我以为是因为onload被调用了当前范围,但根据我对javascript范围的理解,这看起来并不正确。因此,作为测试,我在一个简单的页面上检查了这一点。

(function () {
    var test = "This is a test", testFunc = function () { console.log(test); };
    window.onload = testFunc;
})();

并且变量test具有正确的值。这告诉我它与文件变量的变化有关。因此,尝试将var localFile = file添加到xhrLoaded方法,以查看在这种情况下它是否会保留正确的值,但似乎并非如此。

0 个答案:

没有答案