2013-10-09 71 views
0

我一直在學習AJAX,我對AJAX調用中的方法執行順序有點困惑。我看到了太多的變化。例如在AJAX調用中首先執行哪些方法?

   function submitArticle() {     

       try { 
       //alert("yaay"); 
        xhr = new XMLHttpRequest(); 
        } 
        catch(e) { 
        try { 
         xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
        } 
        catch(e) { 
         try { 
          xhr = new ActiveXObject("Msxml2.XMLHTTP"); 
         } 
         catch(e) { 
         alert("Your Browser is not Supported"); 
         return false; 
         } 
        }  

        } 
       var parameters = "postTitle=" + postTitle "&postDes=" + postDes + "&postCont=" + postDes;  
       xhr.open('POST', '/engine/engine.php', true);  
       xhr.send(parameters);         
       xhr.onreadystatechange = function() { 
        if(this.readyState === 4) { 
         if(this.status ===200) { 
         alert(this.responseText); 
         } 
         else { 
         alert("status" + this.status); 
         } 
        } 
        else { 
        alert("readyState" + this.readyState); 
        } 
       } 


      } 

我的問題是,我所看到的代碼,其中開放發送方法被放置在一個非常不同的部位,如評估readyState值爲後。這是正確的路要走。我已經在不同的網站上查看它,所有我看到的都是jQuery教程,並且他們都沒有解釋代碼將以何種順序執行。對不起,如果這是一個非常愚蠢的問題,或者如果我的代碼是錯誤的。

+1

該代碼不正確。什麼是open()和send()。它缺少'xhr.' – epascarello

+0

謝謝,生病就此做出改變。 – Bazinga777

回答

1

當代碼完成運行後,當控制權返回到事件循環時,Javascript只能調用onreadystatechange回調函數。

因此,無論您在發送請求之前還是之後添加處理程序,只要將其添加到同一個同步執行單元中即可。

+0

爲了詳細說明SLaks在說什麼,你實際上並沒有在你的代碼中執行ajax調用。你正在設置ajax調用。如果您同步進行呼叫,則會在Send()發生。但是,如果它是異步的(這是默認的),它將在事件循環中由瀏覽器執行,就像SLak解釋的那樣。 – Pete

+0

非常感謝,我現在明白了。 – Bazinga777

相關問題