You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用AJAX请求删除JSON文件值无报错但未生效,求排查

排查AJAX删除JSON值未生效的问题

我来帮你一步步排查这个删除操作没生效的问题,咱们从几个核心关键点入手:

1. 先确认AJAX请求是否正常发送

首先要排查前端请求有没有真的抵达后端:

  • 打开浏览器开发者工具(F12),切换到Network标签,点击删除按钮后,查看是否有GET /api/delete/[你的ID]的请求。检查请求的状态码(应该是200),以及URL里的ID是否和你要删除的目标ID一致。
  • 给AJAX添加回调函数,捕获请求的成功/失败状态,方便排查:
    function dlt(item) {
      var iddlt = document.getElementById('erase').value;
      console.log('要删除的ID:', iddlt); // 先打印ID确认是否正确
      $.ajax({
        type: 'GET',
        url: 'api/delete/'+ iddlt,
        dataType: 'json',
        success: function(response) {
          console.log('请求成功返回:', response);
          // 这里可以加删除后的页面更新逻辑,比如刷新列表
        },
        error: function(xhr, status, error) {
          console.error('请求出错:', status, error);
        }
      });
    }
    

2. 检查PHP后端的文件写入权限

file_put_contents需要目标文件和文件夹有写入权限,这是很常见的坑:

  • 确认data/文件夹和data/data.json文件的权限(一般服务器上设置为文件夹755,文件644即可)。如果权限不足,PHP无法修改文件内容,且可能不会抛出明显错误。
  • 在PHP代码中添加写入结果检查,同时返回明确的响应:
    $app->get('/delete/{id}', function (array $args) use ($app) {
      $jsonContents = file_get_contents('data/data.json');
      if ($jsonContents === false) {
          return $app->json(['status' => 'error', 'message' => '无法读取JSON文件']);
      }
      $id = $args['id'];
      $data_array = json_decode($jsonContents, true);
      if (json_last_error() !== JSON_ERROR_NONE) {
          return $app->json(['status' => 'error', 'message' => 'JSON解析失败']);
      }
      foreach ($data_array as $key => $value) {
        // 用严格相等===避免类型不匹配的问题
        if ($value['id'] === $id) {
          unset($data_array[$key]);
          break; // 找到目标后直接跳出循环,提升效率
        }
      }
      $data_array = array_values($data_array);
      $writeResult = file_put_contents('data/data.json', json_encode($data_array));
      if ($writeResult === false) {
          return $app->json(['status' => 'error', 'message' => '无法写入JSON文件']);
      }
      return $app->json(['status' => 'success', 'message' => '删除成功']);
    });
    

3. 确认ID的类型匹配问题

注意JSON中的ID类型和前端传递的ID类型是否一致:

  • 如果JSON里的ID是数字(比如"id": 123),而前端传递的是字符串(比如"123"),用==松散相等可能偶尔生效,但更稳妥的是用===严格相等判断,避免类型转换导致的匹配失败,就像上面PHP代码里修改的那样。

4. 检查前端触发逻辑是否完整

最后确认前端的触发链路是否正确:

  • 确认rmv按钮的onclick事件确实绑定了dlt()函数,有没有可能绑定错误或者冲突?
  • deletee函数里添加日志,确认Checker[item].id是正确的,且成功赋值给了erase元素:
    function deletee(item) {
      var el = document.getElementById('erase');
      console.log('Checker中的ID:', Checker[item].id);
      el.value = Checker[item].id;
      var r= confirm("Do you want delete it?")
      if (r==true) {
        console.log('用户确认删除,触发rmv按钮点击');
        document.getElementById('rmv').click()
      }
    }
    

内容的提问来源于stack exchange,提问作者Joanmi

火山引擎 最新活动