这很可能是我忽视的东西,但我无法弄清楚这种情况下究竟是什么问题。
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
方法,以查看在这种情况下它是否会保留正确的值,但似乎并非如此。