【发布时间】:2009-02-09 22:22:20
【问题描述】:
我想知道从实时数据库中删除记录并立即刷新页面的最佳方法。目前我正在使用 ajax,使用以下 javascript 方法:
function deleterec(layer, pk) {
url = "get_records.php?cmd=deleterec&pk="+pk+"&sid="+Math.random();
update('Layer2', url);
}
如果 php 页面上的 cmd=deleterec,则在主键 = pk 的地方进行删除。这工作正常,因为记录被删除,但页面没有更新。
我的更新方法很简单:
function update(layer, url) {
var xmlHttp=GetXmlHttpObject(); //you have this defined elsewhere
if(xmlHttp==null) {
alert("Your browser is not supported?");
}
xmlHttp.onreadystatechange = function() {
if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
document.getElementById(layer).innerHTML=xmlHttp.responseText;
} else if (xmlHttp.readyState==1 || xmlHttp.readyState=="loading") {
document.getElementById(layer).innerHTML="loading";
}
//etc
}
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
如何删除或更改记录,以及更新页面。
目前,我的 ajax 框架通过将数据传递给 javascript 更新方法来工作,该方法适用于选择不同的查询以显示在不同的层中。
我想添加删除功能,或以某种方式更改记录。
我想知道是否可以在单击链接执行查询然后调用我的更新方法并刷新 tge 页面时。考虑到我的更新方法,有什么简单的方法可以做到这一点吗?
如果可能,我想避免重写我的更新方法。
最简单的方法是在执行 mysql 查询后让 php 页面(仅在层中)重新加载吗?
或者创建一个新的“alterstatus”方法,将delete或watch作为参数传递,并让php执行相应的查询然后更新页面?
edit:链接是这样生成的。 deleterec 将从生成的附加链接中调用。
{
$pk = $row['ARTICLE_NO'];
echo '<tr>' . "\n";
echo '<td><a href="#" onclick="updateByPk(\'Layer2\', \'' . $pk . '\')">'.$row['USERNAME'].'</a></td>' . "\n";
echo '<td><a href="#" onclick="updateByPk(\'Layer2\', \'' . $pk . '\')">'.$row['shortDate'].'</a></td>' . "\n";
echo '<td><a href="#" onclick="updateByPk(\'Layer2\', \'' . $pk . '\')">'.$row['ARTICLE_NAME'].'</a></td>' . "\n";
echo '<td><a href="#" onclick="deleteRec(\'Layer2\', \'' . $pk . '\')">'.$row['ARTICLE_NAME'].'</a></td>' . "\n";
echo '</tr>' . "\n";
}
edit:update方法不能修改,因为它被需要层的updateByPk和updateBypg方法使用。
【问题讨论】:
-
一个建议:如果可能,请不要使用 GET,而是使用 DELETE 请求请求,这样您就不会因为有人在浏览器中键入正确构造的 URL 而导致删除。
-
您应该能够使用 AJAX 发送 DELETE 请求。 POST 也可以。不过,DELETE 更加 RESTful。
标签: php javascript ajax