JavaScript,匿名vs直接函数调用

时间:2014-10-29 18:02:07

标签: javascript ajax

在下面的代码片段中,我将匿名函数分配给 onreadystatechange 变量,一切正常,但是如果我将命名函数分配给此变量则不起作用。

 <script language="Javascript">
    function postRequest(strURL) 
    {
        var xmlHttp;
        if (window.XMLHttpRequest) // Mozilla, Safari, ...
            var xmlHttp = new XMLHttpRequest();
        else if (window.ActiveXObject) // IE
            var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        xmlHttp.open('POST', strURL, true);
        xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xmlHttp.onreadystatechange = function() 
        {
            alert("you are in anonymous");
        }
        xmlHttp.send(strURL);
    }
</script>

以上代码有效,但以下内容无效。函数foo()不会被调用:

 <script language="Javascript">
    function foo()
    {
        alert("you are in foo");
    }
    /*----------------------------------------------*/
    function postRequest(strURL) 
    {
        var xmlHttp;
        if (window.XMLHttpRequest) // Mozilla, Safari, ...
            var xmlHttp = new XMLHttpRequest();
        else if (window.ActiveXObject) // IE
            var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        xmlHttp.open('POST', strURL, true);
        xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xmlHttp.onreadystatechange = foo; 
        xmlHttp.send(strURL);
    }
</script>

为什么?

1 个答案:

答案 0 :(得分:-1)

问题已解决。 var xmlHttp 必须是全局的。虽然我没有在foo()中使用 xmlHttp ,但可能是 xmlHttp 对象内部需要它!谁知道为什么?无论如何,这个问题已经解决了。感谢