2008-09-04 80 views
2

我在許多在線教程中都看到了簡單的示例Ajax源代碼。我想知道的是,在示例中使用源代碼是否完全正確?我的Ajax代碼有多複雜?

還有什麼更多的東西要添加到進入真實世界應用程序的代碼中嗎?

爲了使應用程序更健壯和安全,將採取哪些步驟?

這裏是一個示例源代碼,我從網上得到:

function getChats() { 
    xmlHttp=GetXmlHttpObject(); 
    if (xmlHttp==null) { 
      return; 
    } 
    var url="getchat.php?latest="+latest; 
    xmlHttp.onreadystatechange=stateChanged; 
    xmlHttp.open("GET",url,true); 
    xmlHttp.send(null); 
} 

function GetXmlHttpObject() { 
    var xmlHttp=null; 
    try { 
      xmlHttp=new XMLHttpRequest(); 
    } catch (e) { 
      try { 
        xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
      } catch (e) { 
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
    } 
    return xmlHttp; 
} 

回答

3

您發佈的代碼缺少一個重要的成分:函數stateChanged。

如果您對自己發佈的代碼不甚瞭解,那麼會發生什麼情況是當調用getchats.php完成時,會調用一個函數「stateChanged」,並且該函數將負責處理響應。既然你所調用的腳本和函數本身的前綴是「gets」,那麼我很肯定你的反應是你會感興趣的。

除此之外,還有很多方法改進您發佈的代碼。我猜可以通過聲明一個單獨的「xmlHttp」對象,然後將它提供給每個函數來工作(因爲如果沒有,stateChanged函數就無法獲得響應)。這是沒有問題的,直到你在最後一個(或最後幾個)尚未回覆之前運行AJAX請求,在這種情況下,每次都將對象引用覆蓋到最新的請求。另外,任何值得其鹽的AJAX代碼都提供了成功和失敗(服務器錯誤,找不到頁面等)情況的功能,以便可以將用戶消息傳遞給用戶。

如果您只是想在您的網站上使用AJAX功能,那麼我會指向您的方向jQuerysimilarframework

但是如果你真的想要理解技術和幕後發生的事情,我會繼續做你正在做的事情,當你嘗試自己構建一個小型的輕量級AJAX類時,我會繼續做你正在做的事情並提出具體問題。我就是這麼做的,雖然我今天使用了jQuery框架,但我仍然很高興我知道它是如何在幕後工作的。

0

我會用一個框架,像DOMAssistant這已經做好了爲你努力工作和將更爲強勁,以及增加額外的有用特徵。

除此之外,你的代碼看起來像它會做的工作。

0

我會誠實地推薦使用可用於Ajax的許多庫之一。我自己使用prototype,而其他人更喜歡jQuery。我喜歡原型,因爲它非常小巧。 Prototype Ajax tutorial解釋得很好。它也可以讓你輕鬆處理錯誤。

new Ajax.Request('/some_url', 
    { 
    method:'get', 
    onSuccess: function(transport){ 
     var response = transport.responseText || "no response text"; 
     alert("Success! \n\n" + response); 
    }, 
    onFailure: function(){ alert('Something went wrong...') } 
    });