繁体   English   中英

执行 php 脚本后 JavaScript 警报 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 代码以指示操作是否成功。

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

  • 尽管许多人会使用像 Angular 或 React 这样的框架来标准化这个工作流程。

用户体验

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

I've put up an example for the HTML on JS-Fiddle with jQuery to simplify the AJAX call: 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 更整洁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM