无法获得Ajax的工作原理

时间:2010-07-06 10:29:48

标签: php ajax

我遇到Ajax问题。我对阿贾克斯来说完全是诺贝克,我为这样一个愚蠢的问题道歉。

我有一个我要管理的元素列表(由db加载),即删除,修改其名称..;我想使用ajax来更改数据库和列表。

但是我希望在修改数据库之后才修改页面。我可以在修改数据库之前修改页面,但这不是我想要的。

这是我的代码:

function setXMLHttpRequest() {
   var xhr = null;
   if (window.XMLHttpRequest) {
     xhr = new XMLHttpRequest();
   }
   else if (window.ActiveXObject) {
     xhr = new ActiveXObject("Microsoft.XMLHTTP");
   }
   return xhr;
 }

function modifyCat(n,newN){
    xhrObj = setXMLHttpRequest();
    var url = "modifyCat.php?action=modify&cat="+n+"&newCat="+newN;
    xhrObj.open("GET", url, true);
    links = document.getElementById("cat").getElementsByTagName("a");
    updatePage(links);
    xhrObj.send(null);
}

function updatePage(links) {
     if (xhrObj.readyState == 4) {
         var risp = xhrObj.responseText;
                     //code that works... if not put inside this if!
     }  
     xhrObj.send(null);
}

ModifyCat.php是

//...
else if($action='modify'){
    $n = cleanSimpleString($_GET['cat']);
    $nN = cleanSimpleString($_GET['newCat']);
    $qry = "UPDATE Categorie Set Nome='$nN' WHERE Nome='$n'";
    $check = mysql_query($qry) or $db=0; 
}

据我了解if (xhrObj.readyState == 4)应该想要我问。相反,如果没有任何反应(在页面中,PHP正确加载)。没有它如果页面被正确重新加载但数据库正在工作..

修改。

我想在没有框架的情况下做到这一点,我认为这很简单,可以简单解决。

谢谢。

3 个答案:

答案 0 :(得分:1)

如果你是“完全没有Ajax”,我建议使用Ajax库,比如jQuery。看看他们的Ajax page,您会发现它比直接使用XHR对象要简单得多。

此外,你有一个拼写错误 - 你在hrObj中使用了modifyCat

答案 1 :(得分:1)

您可以使用XMLHttpRequest来执行同步或异步请求。同步请求更容易编程,但会阻止您的页面,直到结果可用。当结果可用时,异步请求将执行回调函数。有许多事件将执行回调,readyState = 4表示结果可用,另请参阅:

http://en.wikipedia.org/wiki/XMLHttpRequest#The_onreadystatechange_event_listener

(当然还有那篇文章的其余部分)

话虽如此,将其他地方的建议放在心上,使用jquery(或类似的javascript / ajax库)更容易(以及更多跨浏览器兼容)来完成这些工作。

答案 2 :(得分:0)

如果您只是使用jquery,它会为您节省很多麻烦 - 它可以像执行此操作一样简单:

$.get("modifyCat.php", { action: "modify", cat: n, newCat: newN },
   function(data){
     alert("Data Loaded: " + data);
   });

http://api.jquery.com/jQuery.get/