【问题标题】:How to call a javascript function script from php如何从 php 调用 javascript 函数脚本
【发布时间】:2021-12-11 06:58:15
【问题描述】:
<?php

echo "<script type='text/javascript'>error_warning('Error!'); </script>";

?>

<!DOCTYPE html>
<html stuff>
    <div id="alert_box" class="alert"></div>
</html stuff>

<script  type="text/javascript">
    function error_warning(warning){
        var div = document.getElementById('alert_box')
        div.style.display='block';
        div.textContent=warning;
        setTimeout(function(){ div.style.display = "none"; }, 5000);
    }
</script>

此代码已大大简化,但显示了关键值。我正在尝试在 php.ini 代码的底部运行 Javascript 函数。在完整的代码中,当发生某些事情时,php 会回显该脚本。我试过类似的代码:

echo "<script> alert('Error!') </script>";

这可行,但我宁愿创建自己的警报消息,该消息出现在页面的右上角。 div 设置为display: none,但我试图运行调用设置display: block 的函数。所有的 css 都被处理了,我已经测试过它可以使用一个按钮。

我在 XAMPP apache mysql 上运行我的代码。这是加载页面时的错误类型:

Uncaught ReferenceError: error_warning is not defined
    at account.php:1

我收集到的是,当 php 正在服务器端运行时,该函数未定义,因此它看不到它,因此返回错误。我尝试了几种解决方案,例如将脚本放在 php 之前,但它们没有奏效。

谁能帮忙?

谢谢

【问题讨论】:

  • 将 PHP 移到 JS 函数之后。 PHP 将解析整个页面并将其传递给浏览器,然后在浏览器中评估 JS。您在上面遇到的问题是传递给浏览器的页面试图执行尚未创建的功能。
  • 通常,如果您尝试以这种方式将客户端逻辑与服务器端逻辑配对,则意味着您存在架构缺陷并且以错误的方式思考逻辑。也许如果您将原理解释为您希望此“错误警告”具体发生的原因和时间,我们可以将您推向正确的方向。我会敦促您研究 AJAX,在这种情况下,您甚至可以自己想出一个解决方案。另外请注意,尽量不要简化您的问题,而是“按原样”呈现它,除非您对所呈现的内容非常有信心。
  • 非常感谢@j08691。
  • @Martin 当我有一个更大的网站时,我会研究 AJAX。不过谢谢:)
  • @sebtheoo 您可以将错误消息的值存储到一个变量中,并在初始化 js 文件后在页面底部检查该变量,然后打印脚本标签。您的脚本标签也应该在

标签: javascript php html css


【解决方案1】:

有多种选择可以做到这一点。 Ajax 还是一个简单的回声。但是对于您的问题,只需将 onload 函数添加到脚本 echo 就足够了。

<?php

echo "<script type='text/javascript'>window.onload = () => {error_warning('Error!')}; </script>";

?>

另一个可能的选择是在函数声明后调用它。

<!DOCTYPE html>
<html stuff>
    <div id="alert_box" class="alert"></div>
</html stuff>

<script  type="text/javascript">
    function error_warning(warning){
        var div = document.getElementById('alert_box')
        div.style.display='block';
        div.textContent=warning;
        setTimeout(function(){ div.style.display = "none"; }, 5000);
    }
</script>
<?php

echo "<script type='text/javascript'>error_warning('Error!'); </script>";

?>

【讨论】:

    【解决方案2】:

    这个问题的解决方案是……

    1. 函数定义后调用。

    为此,您可以使用一些服务器端变量来激活页面末尾的函数调用。

    <script> function popAlert(errorType){//do something} </script>
    <?php if($error == 1) echo "<script>popAlert(1);</script>";?>
    
    1. 将您的函数放在单独的.js 文件中,并将其包含在您的页面中。
    <?php 
    if($error == 1) echo "<script>popAlert(1);</script>";
    ?>
    <script src="errors.js"></script> 
    
    1. 使用 Ajax 从 .php 文件中获取响应,然后确定需要弹出的内容

    例如:-

     $.post("url", "data", function(data, status){
      if(status == "success"){
        if(data == 1) popAlert(1);
        if(data == 2) popAlert(2);
      }
    });
    

    附加内容

    我建议您使用出汗警报参考here

    例如:-

    function popAlert(type){
    if(type == 1){
    Swal.fire({
      icon: 'success',
      title: 'You did it...!'
    })
    }
    if(type == 2){
    Swal.fire({
      icon: 'error',
      title: 'Oops, something went wrong...!'
    })
    }
    }
    <script src="https://cdn.jsdelivr.net/npm/sweetalert2@10.10.1/dist/sweetalert2.all.min.js"></script>
    <h1>Click on buttons to pop alert</h1>
    
    <button onclick='popAlert(1)'> success </button><br/>
    <button onclick='popAlert(2)'> error </button><br/>

    如有任何疑问,请发表评论。

    【讨论】:

    • 我决定将 php 放在 js 之后,现在可以使用了。谢谢,虽然我宁愿使用自己的通知,但 sweetalert 确实是一个不错的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 2013-05-25
    • 2018-08-04
    • 2010-11-05
    相关资源
    最近更新 更多