2010-07-06 62 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庫)來做這件事情要容易得多(並且更多的跨瀏覽器兼容)。