【问题标题】:table.ajax.reload() not triggering after success: function()成功后不触发 table.ajax.reload():function()
【发布时间】:2018-09-06 17:42:37
【问题描述】:

简介

我正在使用 json、ajax 和 php 进行 datatables.net jquery 服务器端处理。我可以单击行按钮并从数据库中删除行。但是,页面永远不会使用 ajax.reload() 刷新页面;

项目链接 https://databasetable-net.000webhostapp.com/

问题

这段代码:

console.log("success function data reached");

似乎永远无法到达。是什么原因造成的?

我没有错误,表正确地从数据库中删除,这就是我卡住的原因。 datatables.net 上的一切似乎都很好,我很可能有 php 问题?

Index.php

<script type="text/javascript"> 
        $(document).on('click','.delete_btn',function (){
    var id = $(this).attr("id").match(/\d+/)[0];
  var del_id = $('#example').DataTable().row( id ).data();
  var del_id = del_id[0];
  console.log(del_id[0]); 
        $.ajax({
            type:'POST',
            url:'delete.php',
            dataType: 'json', //This says I'm expecting a response that is json encoded.
            cache: false,
            data: { 'del_id' : del_id}, 
            success: function(data){ 
                console.log("success function data reached");
              if(data=='result_ok'){  //You are checking for true/false 
                //document.location.reload(true);
               alert(data);
                table.ajax.reload();

              }else{
                console.log('The row was not deleted.');
                }
                }
        });
        });
</script>

删除.php

<?php
$del_id = $_POST['del_id']; 
$stmt = $conn->prepare("DELETE FROM employees WHERE id = ?"); 
$stmt->bind_param('i', $del_id);
$confirmDelete = $stmt->execute();
//header("location: index.php");

if($confirmDelete){ //Check to see if there was an affected row.
 echo "result_ok";
}

echo json_encode($confirmDelete);
?>

【问题讨论】:

  • 我显然不明白你想要什么
  • 它的免费虚拟主机。您应该购买优质服务
  • 你为什么使用数组,通常你可以这样做: if($confirmDelete){ echo "result_OK" } 并检查来自ajax调用的返回值:success: function(data){ if (data == 'result_OK') { // 做你想做的事情 } else { // 做一些错误的事情 } }
  • ok 会尝试你的方式。该数组方法来自此人的答案(可能是错误的)stackoverflow.com/questions/51923576/…
  • 尝试查看从 ajax 返回的内容只是警报数据:成功:函数(数据){警报(数据)}。 data 包含来自 php 脚本的结果,无需编码或使用数组,您也可以通过单击 php 文件从网络选项卡中使用开发工具查看返回值

标签: php jquery ajax datatables


【解决方案1】:
<script type="text/javascript"> 
    $(document).on('click','.delete_btn',function (){
        var id = $(this).attr("id").match(/\d+/)[0];
        var del_id = $('#example').DataTable().row( id ).data();
        var del_id = del_id[0];
        //console.log(del_id[0]); 
        $.ajax({
            type:'POST',
            url:'delete.php',
            data: {del_id:del_id}, 
            success: function(data){ 
                if (data=='DEL_OK') {
                  location.reload();
                } else {
                     alert('something wrong')
                  }
             })
        });
</script>

而且php代码必须是:

<?php
   $del_id = $_POST['del_id']; 
   $stmt = $conn->prepare("DELETE FROM employees WHERE id = ?"); 
   $stmt->bind_param('i', $del_id);
   $confirmDelete = $stmt->execute();

   if($confirmDelete) {
      echo "DEL_OK";
   }
?>

【讨论】:

  • 是的,您可能有连接消息。在我为您发布的屏幕截图中,标头已经从第 9 行的文件 connection.php 发送。很乐意提供帮助并随时提问。
【解决方案2】:

根据我对您的问题的理解,您实际上并没有正确收到来自phpajax 的回复。 ajax 响应中的data 实际上是一个字符数组。

$.ajax({
        type:'POST',
        url:'delete.php',
        data: {del_id:del_id}, 
        success: function(data){ 
            if (data[0]=='D') {//changing here
              location.reload();
            } else {
                 alert('something wrong')
              }
         })
    });

在php中

<?php
  $del_id = $_POST['del_id']; 
  $stmt = $conn->prepare("DELETE FROM employees WHERE id = ?"); 
  $stmt->bind_param('i', $del_id);
  $confirmDelete = $stmt->execute();

  if($confirmDelete) {
     echo "D";// echoing only D
  }
?>

【讨论】:

  • 刚刚注意到你有数据[0],通常我只看到像原始答案这样的普通数据。有趣的将不得不提醒看看有什么区别......
  • 是的。当你有多个字符串出来时,它很有用,就像你在回显一个字符串和 json
猜你喜欢
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 2023-03-20
相关资源
最近更新 更多