JavaScript 在 php 脚本执行后提醒 window

JavaScript alert window after php script executed

这里是可以删除的脚本 - klient_usuwanie_script.php - 它运行良好。但是我希望它在删除记录时显示 JavaScript 警报。因此,在脚本删除记录后,它是一个 window 并显示记录 - klient_usuwanie.php 但我希望它是这个 window 与记录但也有一个警告说“记录已删除”

<?php
    $sql = "DELETE FROM Klienci WHERE  id= :del_klient";
    $stmt = $pdo->prepare($sql);
    
    $stmt->execute(array(
        'del_klient' => $_GET['id']
    ));
    header('Location:klient_usuwanie.php?msg='.urlencode($msg).'');
?>

所以要清理它。我有一个页面,我在其中看到要删除的记录 - klient_usuwanie.php 带有“删除”按钮。当我按下删除时,脚本 klient_usuwanie_script.php(包含在上面)删除了一条记录。之后它重定向到 klient_usuwanie.php 页面,我可以看到其他记录,我可以删除它们。但是在我删除一条记录后,我想要一个警报 window,上面写着“记录已删除”。

当我注释掉

header('Location:klient_usuwanie.php?msg='.urlencode($msg).'');

并放

echo  .$stmt->rowCount();

它告诉我一条记录已被删除,但我希望它处于警报状态 window 并且理想情况下警报显示在重定向页面上。

您可以像这样使用查询字符串重定向:

header('Location:klient_usuwanie.php?msg='.urlencode($msg).'&deleted=true');

并且在 klient_usuwanie.php 中,解析查询参数并使用 javascript 显示警报,如下所示:

window.onload = function() {
  const urlParams = new URLSearchParams(window.location.search);
  if (urlParams.get("deleted") === "true") {
    alert("Record deleted");
  }
}

添加到header('Location:klient_usuwanie.php?msg='.urlencode($msg).'');

header('Location:klient_usuwanie.php?msg='.urlencode($msg).'&skasowane=tak');

在 klient_usuwanie.php 中添加如下内容:

if($_GET['skasowane']=="tak"){echo "<script>alert(\"I am an alert box!\");</script>";}
echo '<script type="text/javascript" language="Javascript">alert("Record Deleted Thats all")
    </script>';

对现代方法的建议:

免责声明:此答案与意图相关,而不是确切的要求。 为什么?为这种请求重新加载整个页面是一种过时的做法。

如今,您更可能依赖 AJAX 此类场景的调用。 删除端点将接收带有 ID 的请求并响应正确的 HTTP 代码以指示操作是否成功。

  • Restful HTTP 端点当然可以写成 PHP 来响应数据而不是 HTML.
  • 查看带有良好端点示例的 Swagger:https://editor.swagger.io

在您的前端,您可以实施必要的 JavaScript 代码来执行 AJAX 请求并根据需要操作 DOM。

  • 尽管许多人会使用 Angular 或 React 等框架来标准化此工作流程。

用户体验

这种方法对用户来说要好得多,因为浏览器不需要再次重新加载整个页面。因为它只触发一个微小的 HTTP 请求,所以速度快得多,滚动位置也不会跳来跳去。

我在 JS-Fiddle 上为 HTML 和 jQuery 举了一个例子来简化 AJAX 调用: https://jsfiddle.net/sny9hw73/3/

示例:

<div id="entry-<?=$id;?>" class="banner-message">
  <p>My Entry with real request</p>
  <button onClick="delete(<?=$id;?>);">Delete Entry</button>
</div>

<script>
function delete(id) {
  $.ajax({
  url: '/entry.php,
  data: { 'entryId': id },
  type: 'DELETE',
  success: function(result) {
      $('#entry-' + id).remove();
  },
  fail: alert('Delete Record No: ' + id + ' failed')
}
</script>

注意: 警报也不总是很好。虽然简单,但它们会停止代码执行并且在某些情况下呈现效果不佳。即:在网络视图中或在移动设备上。 它们还会导致全屏退出。

更专业的做法是在DOM中播放通知。 Angular Material 的 Snackbar 在这个意义上更整洁。