我的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; }
解决方案
回答
我将使用像DOMAssistant这样的框架,该框架已经为我们完成了艰苦的工作,并且会更加健壮并添加其他有用的功能。
除此之外,代码看起来可以完成任务。
回答
老实说,我建议使用许多可用于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...') } });
回答
我们发布的代码缺少一项重要内容:函数stateChanged。
如果我们不太了解自己发布的代码,那么将发生在对getchats.php的调用完成时,将调用函数" stateChanged",并且该函数将负责处理响应。由于我们正在调用的脚本以及函数本身都带有" gets"前缀,因此我很确定响应是我们将感兴趣的东西。
除此之外,还有许多方法可以改善我们发布的代码。我猜它可以通过声明一个" xmlHttp"对象然后将其提供给每个函数来工作(因为如果没有,stateChanged函数将无法获得响应)。这很好,直到我们尚未回答最后一个(或者最后几个)之前运行AJAX请求为止,在这种情况下,每次将对象引用覆盖为最新请求。
同样,任何值得赞扬的AJAX代码都可以为成功和失败(服务器错误,未找到页面等)情况提供功能,以便可以将适当的消息传递给用户。
如果我们只想在网站上使用AJAX功能,那么我会向我们指出jQuery或者类似框架的方向。
但是,如果我们实际上想了解技术以及幕后发生的事情,那么当我们尝试自己构建一个小型轻量级AJAX类时,我将继续做我们正在做的事情并提出一些具体问题。这就是我做到的方式,尽管我今天使用的是jQuery框架。我仍然很高兴知道它在幕后的工作方式。