我遇到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正确加载)。没有它如果页面被正确重新加载但数据库正在工作..
修改。
我想在没有框架的情况下做到这一点,我认为这很简单,可以简单解决。
谢谢。
答案 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);
});