Php 在ajax中,数据从数据库中删除,但在刷新时从屏幕上消失

Php 在ajax中,数据从数据库中删除,但在刷新时从屏幕上消失,php,ajax,Php,Ajax,我正在尝试根据删除(Ajax)选项删除数据。当我单击删除按钮时,它会从数据库中删除数据,页面会自动删除数据。但不会发生这种情况,它删除了数据,但没有从屏幕上消失。当我刷新页面时,页面中的数据消失了……请帮助我 html代码 <table><tr><td><a href="javascript:remove()">Remove</a></td> <td id="resId"><

我正在尝试根据删除(Ajax)选项删除数据。当我单击删除按钮时,它会从数据库中删除数据,页面会自动删除数据。但不会发生这种情况,它删除了数据,但没有从屏幕上消失。当我刷新页面时,页面中的数据消失了……请帮助我

html代码

<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;
        }