题
我有一个小JS功能,并Ajax我和另一个喜欢它,增加了在发布数据的请求。与阿贾克斯在这样一个大的议题有这么多的文库有关,是什么我错过从我的功能,它是不安全或其他什么东西令人担忧的?
function loadPage(pagePath, displayElement)
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.getElementById(displayElement).innerHTML = xmlHttp.responseText;
}
}
xmlHttp.open("GET", pagePath, true);
xmlHttp.send(null);
}
解决方案
我强烈建议你不滚你自己的阿贾克斯的代码。相反,使用了一个框架,例如原型,道场,或者任何其他人。他们已经照顾的处理的所有ReadyStates你不处理(2意味着它已经发送,3意味着它的过程中,等等), 他们应该逃跑的响应你,所以你不要插入可能不安全的javascript或东西进入你的网页。
另一件事情更加坚实的框架会给你的是能够做的不仅仅是使用innerHTML替换的项目,在DOM中。你能在这里只可用来更换一元素应从阿贾克斯的电话。有很多你能做的Ajax。
其他提示
我会除去这条线。
alert("Your browser does not support AJAX!")
喊的用户的语言他可能不理解是比失败。:-)
我从来没有风扇的嵌套的试/抓块,所以我愿意做这样的东西:
var xmlHttp;
if (window.XMLHttpRequest) {
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
if (xmlHttp) {
// No errors, do whatever you need.
}
我认为,将工作。但是,正如已经提到的那之前-为什么要重新发明车轮,使用图书馆。甚至更好的-找出他们是如何做到这一点。
,这是可能最轻的一个受欢迎的图书馆。
同样的事情在原型:
function loadPage(pagePath, displayElement) {
new Ajax.Updater(displayElement, pagePath);
}
如果你真的想看看你是什么丢失了,读延或原型源代码,他们的ajax程序。如果有错误数字的评论,看起来的那些好了。
不隶属于 StackOverflow