onload功能烧坏了

时间:2011-02-15 04:56:24

标签: javascript javascript-events

任何想法为什么以下代码:

    <script>        
        var access_token;
        var access_token_secret;        

        function Login(){
            img = document.getElementById('authenticate');
            img.src = 'authenticate.png';
            login = document.getElementById('login');
            login.style.visibility="visible";
        }
        function cookieHandlerStep1(){
            chrome.cookies.get({ 
                url:URL_GOES_HERE, 
                name:'access_token'
            },
            function(cookie){
                if(cookie){ 
                    access_token = cookie['value'];
                    cookieHandlerStep2();
                } else{ 
                    Login();
                }
            });
        }
        function cookieHandlerStep2(){
            chrome.cookies.get({ 
                url:URL_GOES_HERE, 
                name:'access_token_secret'
            },
            function(cookie){
                if(cookie){ 
                    access_token_secret = cookie['value'];
                    Interact();
                } else{ 
                    Login();
                }
            });
        }
        function Interact(){
            alert(access_token);
            xhr = new XMLHttpRequest();
            xhr.open("GET", URL_GOES_HERE, true);
            xhr.onreadystatechange = function() {
              if (xhr.readyState == 4) {
                    document.write(xhr.responseText);
              }
            }
            xhr.send();
        }
    </script>


<body onload="cookieHandlerStep1(),cookieHandlerStep2(),Interact()">

可能会使函数不按顺序执行吗?

1 个答案:

答案 0 :(得分:2)

他们没有按顺序开火。您已经向chrome.cookies.get提供了回调,但不保证在其余代码之前调用这些回调。第一个函数在触发回调之前返回,接下来的两个函数(cookieHandlerStep2()Interact())被调用。

但是,在这些回调中,cookieHandlerStep1()已经调用cookieHandlerStep2()然后调用Interact() - 因此我假设您onload中实际需要的只是第一个函数启动链:

<body onload="cookieHandlerStep1()">