2010-07-06 61 views
0

我遇到Ajax问题。我完全不喜欢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正确加载)。没有这个如果页面被正确地重新加载,但是db正在工作..

编辑。

我想这样做没有框架,我认为这是一个简单的事情,可以简单地解决。

谢谢。

+0

你能告诉我们'modifyCat.php'脚本吗? (另外,如果你修改状态,你应该使用'POST'而不是'GET') – 2010-07-06 10:33:15

+0

为什么你不使用一些ajax框架?它将帮助您处理浏览器兼容性,并使您的代码变得简单容易 – 2010-07-06 10:36:22

回答

1

如果你“完全禁用Ajax”,我推荐使用Ajax库,比如jQuery。看看他们的Ajax page,你会发现它比直接使用XHR对象更直接。

此外,你有一个错字 - 你在 modifyCat使用 hrObj

+0

我已将其复制到不良内容。这不是代码中的错字。谢谢。 无论如何,因为我只是想要简单的ajax请求,我不想使用库..如果它不是真的有必要。谢谢 – 2010-07-06 10:37:12

0

如果你只是使用jQuery的它会为你节省很多头痛的 - 它可以像这样一样简单:

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

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

1

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

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

(当然该制品的其余部分的)

具有说,把其他地方的建议放在心上,使用jquery(或类似的javascript/ajax库)来做这件事情要容易得多(并且更多的跨浏览器兼容)。