【问题标题】:Execute javascript in a file called through post request在通过 post 请求调用的文件中执行 javascript
【发布时间】:2016-08-26 13:30:06
【问题描述】:

我有一个包含一个按钮的 php 文件(index.php),如果单击该按钮,它将触发一个 javascript 函数,该函数将在 php 文件上发布请求( login.php)。现在在那个 login.php 上,如果条件为真,我将被重定向到一个 url,使用 javascript。对于这个例子,我不会问如何重定向,而只是在那个 login.php 上执行一个简单的alert();

我找到了一个答案说我应该这样做:

<?php // some php code
   // php condition is true {
   echo "<script type="text/javascript">
            alert('Alert worked.');
         </script>";
   // }
   // more php code 
?>

它执行echo,但从不执行脚本。
如何在文件中执行 javascript(通过 post 请求调用)。

【问题讨论】:

  • 这是因为文件在服务器端,而不是实际存在于浏览器中吗?
  • 这是一个糟糕的结构。相反,让 AJAX 调用返回一个值(true 或 false),并让原始 javasrcipt 基于该值执行重定向。

标签: javascript php jquery ajax http-post


【解决方案1】:

要使用 AJAX 使其工作,您应该将此响应添加到 DOM 页面。例如:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
    $.get('/test.php', function (script) { 
        $('body').append(script);
    })
</script>

【讨论】:

  • 在您的页面中包含 jQuery JS 库以使用此解决方案
  • 这不会执行来自login.php 的javascript,但它会完成这项工作,它会执行在login.php 中打印/回显的脚本。谢谢!
【解决方案2】:

退出 PHP,让 JS 真正运行。使用回声,您只是将其写入正在生成的页面。

<?php // some php code
   // php condition is true
 {
?>
<script type="text/javascript">
        alert('Alert worked.');
</script>";
<?php
}
// more php code 
?>

【讨论】:

    【解决方案3】:

    正如 cale_b 和 Andrew Koper 所述,您需要重新考虑您的方法。如果 login.php 仅用于路由用户而不显示任何输出,那么您将永远不会看到您的 Javascript 警报。

    您可以通过 AJAX 向 login.php 发帖并返回一个值:

    AJAX POST:https://api.jquery.com/jquery.post/

    $.ajax({
        type: "POST",
        url: 'login.php',
        data: data_to_post,
        success: function(e) {
            // e will be whatever you've returned from your login.php script
    
            // Perform conditional check on e 
            (if (e === 'success') {
                // Alert message here
                alert("You've been logged in!");
    
                // Redirect user here as needed
                window.location = 'www.your_url.com';
            }
        }
        dataType: dataType
    });
    

    我应该提到这个解决方案依赖于 JQuery:

    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    </head>
    

    JQuery - 入门:http://www.w3schools.com/jquery/jquery_get_started.asp

    【讨论】:

      【解决方案4】:

      从根本上说,您尝试做的事情的结构(基于您所写的内容)听起来并不正确。听起来你想要:

      1. 将单击事件处理程序附加到索引页上的按钮
      2. 单击时,向服务器发送 AJAX 请求。 (如果您有一个带有一些变量的表单需要提交/存储在服务器上,请使用 POST。如果您需要从服务器获取真/假变量,请使用 GET。拥有页面没有意义在服务器上带有未提供的真/假变量. 让页面上带有真/假变量的页面提供一微秒只是为了让变量提供服务是没有意义的另一个页面。)
      3. "window.location = 'http://whatever.com'" 将通过 JavaScript 向用户显示一个新网页。或者,按钮可以向服务器上的 PHP 文件发送 HTTP 请求,然后 PHP 可以像往常一样根据真/假测试发回网页。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-18
        • 1970-01-01
        • 2016-11-28
        • 2018-12-13
        • 1970-01-01
        • 1970-01-01
        • 2014-07-26
        相关资源
        最近更新 更多