我有一个小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);
}

阿贾克斯。更新原型API

如果你真的想看看你是什么丢失了,读延或原型源代码,他们的ajax程序。如果有错误数字的评论,看起来的那些好了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top