Php 在ajax中,数据从数据库中删除,但在刷新时从屏幕上消失
我正在尝试根据删除(Ajax)选项删除数据。当我单击删除按钮时,它会从数据库中删除数据,页面会自动删除数据。但不会发生这种情况,它删除了数据,但没有从屏幕上消失。当我刷新页面时,页面中的数据消失了……请帮助我 html代码Php 在ajax中,数据从数据库中删除,但在刷新时从屏幕上消失,php,ajax,Php,Ajax,我正在尝试根据删除(Ajax)选项删除数据。当我单击删除按钮时,它会从数据库中删除数据,页面会自动删除数据。但不会发生这种情况,它删除了数据,但没有从屏幕上消失。当我刷新页面时,页面中的数据消失了……请帮助我 html代码 <table><tr><td><a href="javascript:remove()">Remove</a></td> <td id="resId"><
<table><tr><td><a href="javascript:remove()">Remove</a></td>
<td id="resId"></td></tr></table>
PHP函数是
function remove(){
var http = GetXmlHttpObject();
http.onreadystatechange = function()
{
if(http.readyState==4)
{
document.getElementById("resId").innerHTML = http.responseText;
//alert(http.responseText);
}
}
var name1 = document.getElementById("bn").innerHTML;
//alert(name);
var url = "index.php?menu=remove_cart&ajax=ajax&q="+name1;
http.open('POST',url,true);
http.send(null);
}
function remove_cart($name1){
global $template;
$sql = "DELETE FROM tbl_buy WHERE b_name = '$name1'";
$this->db->executeQuery($sql);
$template->main_content = $template->fetch(TEMPLATE_DIR . 'my_cart.htm');
}
当您使用ajax调用删除数据时,必须从服务器端获得成功/失败响应
我建议您在回调中从服务器获得成功响应时刷新或显示数据的区域,其中有以下代码:
document.getElementById("resId").innerHTML = http.responseText;
编写一些从dom中删除该项的功能
目前,您正在编写对某个html元素的innerHTML的响应,这可能不会产生任何结果
我郑重推荐使用dom操作和ajax库
编辑:
注意上面提到使用了“购物车模板”的注释。您需要使用responseText更新包含购物车的元素的innerHTML。通过使用AJAX修改数据库,您已经禁用了浏览器的默认刷新机制:页面重新加载。因此,您必须使用JavaScript提供自己的页面刷新机制。您需要在PHP中添加一些定制的成功消息,告诉JS一切都很好
if(http.readyState==4)
{
document.getElementById("resId").innerHTML = http.responseText;
//alert(http.responseText);
if (http.status==200){ //on successful server response
//check responsetext for successful DB delete
if ('successful DB delete'){ //pseudo-code condition
//javascript to remove element representing the DB row from the HTML DOM
//ie. element.parentNode.removeChild(element);
}
}
}
要使'element'JS变量表示单击的元素,请修改remove()
函数及其调用方式:
function remove(element){
//...
}
及
其中this.parentNode.parentNode
引用
上方的
希望这能有所帮助。一种快速而肮脏的方法是在成功的ajax调用上刷新页面,如下所示:
if(http.readyState==4 && xmlhttp.status==200)
{
document.getElementById("resId").innerHTML = http.responseText;
//alert(http.responseText);
//refresh page
window.location.href=window.location.href;
}
我喜欢使用:
删除DOM元素。或者,如果要保留该元素,但使其成为子元素并删除文本,请使用:
希望这能有所帮助……http.responseText的价值是什么?我们无法知道对$template的调用在做什么。它是将结果自动回显到请求中,还是需要回显%template->main_内容?是的。我正在template中显示结果。谢谢你的建议。但是我如何刷新区域。成功结果通过一个表显示。我需要刷新整个表吗?如果需要,如何?@AmarJyotyMalakar你删除单个结果还是完成表格后,您可以通过任何一种方式动态地重新生成结果。按照这篇文章,这可能会对您有所帮助。我正在删除一个结果。只有一行。表格的每一行都有“删除”选项。@AmarJyotyMalakar您必须重新创建表格,因为它将位于浏览器缓存中,并使用刷新和重新创建Ajax调用是最好的方法。删除结果时,返回其余结果并动态创建表document.getElementById(“resId”).innerHTML=http.responseText;否则,您必须跟踪已删除的内容,并且必须完成一些繁琐的DOM工作,以便更好地让ajax调用处理这一切—您可能需要一个PHP脚本来为记录生成HTML。然后,您可以在删除成功后对该PHP脚本进行第二次AJAX调用,并用新代码替换现有表。+1用于jQuery作为DOM操纵器和AJAX库。jqueryajax语法简单而强大:
$.AJAX({url:'http://www.url.com,success:function(data,textStatus,jqXHR){alert(data)})代码>查看更多@AmarJyotyMalakar,这是您的解决方案。这不会刷新您的页面吗?window.location.href=window.location.href;我做了测试,它刷新了我的。。。
if(http.readyState==4 && xmlhttp.status==200)
{
document.getElementById("resId").innerHTML = http.responseText;
//alert(http.responseText);
//refresh page
window.location.href=window.location.href;
}