如何通过javascript获取“内容长度”?

时间:2010-12-11 00:57:33

标签: javascript

我有以下代码段:

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调试它,函数将始终正确返回...

2 个答案:

答案 0 :(得分:3)

那是因为函数在返回响应并返回size之前返回。它就是异步执行的。您希望传递一个回调函数,并将其作为参数应用size

答案 1 :(得分:1)

那么你有一个代码顺序问题,那个代码不同步,它是异步的。

回调发生在将来,而回报会立即发生。

在Firebug中调试它的原因导致返回正确,这会使代码减慢到足以使回调在返回之前执行。