我对javascript还是很陌生,并且一直在研究有关如何纠正异步行为引起的问题的指南,但是这种情况似乎无法通过在函数中使用闭包来解决。我要做的就是访问完成后在异步函数内正确设置的值,但是无论我将哪种变量分配给设置值,它都会返回到异步函数范围之外的原始值(未定义)
function callbackClosure(i, callback) {
return function () {
return callback(i);
};
}
var base64data;
var reader = new FileReader();
reader.readAsDataURL(e.data);
reader.onloadend = function () {
base64data = reader.result;
base64data = base64data.split(",")[1];
alert("0: " + base64data); //base64data is correct here
};
alert("1: " + base64data); //base64data value needs to be set correctly at this point, but it's undefined
$.ajax({
cache: false,
url: _w.emailConfirmationReportsUrl +'?mapData="' + base64data + '"'
});
令人沮丧的是,在第一个警报0(首先被调用)时base64data的值显然是正确的,但是在警报1再次未定义。出于某种原因,我不能在onloadend函数中使用ajax。谁能解释警报0和警报1之间发生了什么事情,这将导致base64data丢失其设置的值?我已经尝试在几乎每个使用过的函数的许多不同位置使用callbackClosure函数,但是它并没有改变行为。