我有以下代码片段:
var size;
function getImageSize(url)
{
var xhr = new XMLHttpRequest();
xhr.open('HEAD', url, true);
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4)
{
if (xhr.status == 200)
{
size = xhr.getResponseHeader('Content-Length');
alert(size);
}
}
};
xhr.send(null);
return size;
}此函数的作用是返回(图像的)文件大小。
函数内部的警报将始终返回正确的值,而函数本身将始终返回undefined。为什么?
奇怪的是,如果我用firebug调试它,函数总是会正确返回……
发布于 2010-12-11 08:59:56
这是因为函数在返回响应和设置size之前返回。也就是说它是异步执行的。您希望传递一个回调函数,并将其与size一起作为参数应用。
发布于 2010-12-11 09:00:48
你有一个代码顺序的问题,代码不是同步的,它是异步的。
回调发生在将来,而返回是直接发生的。
在Firebug中调试它会导致返回是正确的,这是因为在到达返回之前,代码会减慢足够长的时间来执行回调。
https://stackoverflow.com/questions/4414570
复制相似问题