我有以下代码段:
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调试它,函数将始终正确返回...
答案 0 :(得分:3)
那是因为函数在返回响应并返回size
之前返回。它就是异步执行的。您希望传递一个回调函数,并将其作为参数应用size
。
答案 1 :(得分:1)
那么你有一个代码顺序问题,那个代码不同步,它是异步的。
回调发生在将来,而回报会立即发生。
在Firebug中调试它的原因导致返回正确,这会使代码减慢到足以使回调在返回之前执行。