2

我在许多在线教程中看到过简单的示例 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;
}
4

3 回答 3

3

您发布的代码缺少一个重要成分:函数 stateChanged。

如果您不太了解自己发布的代码,那么当对 getchats.php 的调用完成时,会调用一个函数“stateChanged”,该函数将负责处理响应。由于您正在调用的脚本和函数本身以“gets”为前缀,所以我很确定响应是您将感兴趣的内容。

除此之外,还有很多方法可以改进您发布的代码。我猜它的工作原理是声明一个“xmlHttp”对象,然后让每个函数都可以使用它(因为如果没有,stateChanged 函数就无法获得响应)。这很好,直到您在最后一个(或最后几个)尚未回复之前运行 AJAX 请求,在这种情况下,对象引用每次都会被覆盖为最新的请求。

此外,任何有价值的 AJAX 代码都提供了成功和失败(服务器错误、找不到页面等)情况的功能,以便可以将适当的消息传递给用户。

如果您只想在您的网站上使用 AJAX 功能,那么我会为您指明jQuery类似 框架的方向。

BUT if you actually want to understand the technology and what is happening behind the scenes, I'd continue doing what you're doing and asking specific questions as you try to build a small lightweight AJAX class on your own. This is how I done it, and although I use the jQuery framework today.. I'm still glad I know how it works behind the scenes.

于 2008-09-04T12:32:23.747 回答
0

我会使用像DOMAssistant这样的框架,它已经为您完成了艰苦的工作,并且会更加健壮并添加额外的有用功能。

除此之外,您的代码看起来可以完成这项工作。

于 2008-09-04T11:27:06.167 回答
0

老实说,我会推荐使用许多可用于 Ajax 的库之一。我自己使用原型,而其他人更喜欢jQuery。我喜欢原型,因为它非常小。Prototype Ajax 教程很好地解释了它。它还允许您轻松处理错误。

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...') }
  });
于 2008-09-04T11:29:29.437 回答