javascript - 除非虚拟 echo 语句就位,否则不会调用 Sweet Alert

标签 javascript sweetalert

我在使用 Sweet Alert 时遇到了一个非常奇怪的错误。希望有人能够提供一些故障排除建议。请观看视频here看看它的奇怪之处。下面我也简单描述一下:

它是代码的用户登录部分的一部分。

该函数调用 Sweet Alert 以提供弹出警报。当我插入一个虚拟 echo 语句(例如 echo "REACHED PREP LOGIN";)时,它会起作用,我会收到弹出窗口。如果不存在,则不会弹出窗口。代码如下:

function prepLogin ($id, $username, $remember, $email){
    $_SESSION['id'] = $id;
    $_SESSION['username'] = $username;
    $_SESSION['email'] = $email;

    $fingerprint = md5($_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']);
    $_SESSION['last_active'] = time();
    $_SESSION['fingerprint'] = $fingerprint;

    if($remember === "yes"){
        rememberMe($id);
    }
    //call sweet alert 
    //echo 'REACHED PREP LOGIN'.'<br>';
    echo $welcome = "<script type=\"text/javascript\">
                            swal({
                            title: \"Welcome back $username!\",
                            text: \"You're being logged in.\",
                            type: 'success',
                            timer: 3000,
                            showConfirmButton: false });
                            setTimeout(function(){
                               window.location.href = '../../index.php';
                            }, 3000);
                        </script>";
}

对我来说没有任何意义为什么 echo 语句会使脚本函数无效......必须有一种方法来解决这个问题。任何帮助将不胜感激!

最佳答案

如果你打开控制台,你会看到来自 Sweat Alert 的错误,指出它是在 dom 完全加载之前注入(inject)的。如果你像这样包装你的 swal 调用

    echo $welcome = "<script type=\"text/javascript\">

document.addEventListener(\"DOMContentLoaded\", function(){
                            swal({
                            title: \"Welcome back $username!\",
                            text: \"You're being logged in.\",
                            type: 'success',
                            timer: 3000,
                            showConfirmButton: false });
                            setTimeout(function(){
                               window.location.href = '../../index.php';
                            }, 3000);
});
                        </script>";

然后 swal 不会触发,直到整个 dom 被加载。我猜当您添加另一个 echo 语句时,它会在脚本标记运行之前渲染整个 dom。

关于javascript - 除非虚拟 echo 语句就位,否则不会调用 Sweet Alert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50262046/

相关文章:

javascript - Sweet Alert和基于php while循环上的id的ajax调用

javascript - AngularJs 中带有微调器的甜蜜警报对话框

javascript - sweetAlert 在 jsp 页面内无法正常工作

javascript - 如何动态更改标签值

javascript - 发出警报时,Sweet alert 2 未显示为模态

javascript - 提交表单 javascript 之前确认警报

javascript - 在对 php 文件的调用之间维护 mysql 连接

javascript - SVG 月相

Javascript xmlHttpRequest 对象检测与 try..catch

javascript - 需要 extjs4 增强功能的高级 VType 密码验证