【问题标题】:Call Javascript function from within PHP block [duplicate]从 PHP 块中调用 Javascript 函数 [重复]
【发布时间】:2012-11-29 14:14:44
【问题描述】:

可能重复:
How to call a JavaScript function from PHP?

我正在为学校做一个项目,但我正在为登录页面而苦恼。在我的 PHP 代码中,如果用户输入了错误的用户名或密码,我想调用一个 Javascript 函数来显示一条消息并短暂更改显示消息的背景颜色。这是我的 JS 和 PHP 代码块:

<script>
var flashContent = function () {
document.getElementById("outputlogin").style.backgroundColor = "#ffff00";
document.getElementById("outputlogin").innerHTML = "Incorrect login.";
function proxy() {
    updateColor(0);
}
setTimeout(proxy, 50);
}

var updateColor = function (newColor) {
var hexColor = newColor.toString(16);
if (hexColor.length < 2)
    hexColor = "0" + hexColor;
var colorString = "#ffff" + hexColor;

document.getElementById("outputlogin").style.backgroundColor = colorString;

function proxy() {
    updateColor(newColor);
}

if (newColor < 255) {
    newColor = newColor + 5;
    setTimeout(proxy, 50);
}
}
</script>

<?php
$username = $_POST['username'];
$password = $_POST['password'];

if(($username == "Ben") && ($password == "thepassword")){
//echo "SUCCESS";
session_start();
$_SESSION['bensedmgallerysesh'] = session_id();

header("Location:../index.php");

}else{
if($username != "" && $password != ""){
    javascript:flashContent();
}
}
?>

现在,点击登录按钮后,我收到错误消息:

致命错误:调用未定义的函数 flashContent()

我该如何解决这个问题?

【问题讨论】:

  • 您还想查看this question over on Meta,了解您名下的大肥橙“0%”可能会如何影响您获得答案的能力。
  • 您使用 Javascript 作为客户端语言,使用 PHP 作为服务器端语言。您不能从另一种语言中直接调用其中一种语言的方法。
  • 你知道什么 JS 和 PHP 在完全不同的环境中运行吗?一种是客户端(浏览器),JS,一种是服务器端,PHP。如果您需要一个 PHP 脚本来验证您的表单服务器端,那么您有两个选择,向 PHP 脚本发出 AJAX 请求并让 JS 采取相应的行动,或者让表单提交给 PHP 脚本并让它输出一些 HTML/ JS 会做你需要做的事情。彼此之间没有呼唤。

标签: php javascript


【解决方案1】:

您正试图在服务器端脚本中调用客户端函数。你可以这样做:

if($username != "" && $password != ""){
?>
    <script type="text/javascript">
        flashContent();
    </script>
<?php 
}

但是以一种防止您尝试编写这样的服务器端处理的方式实际分离逻辑可能更聪明。组织能力在这项业务中大有帮助。

【讨论】:

  • 没错,你可以,但你不应该:)
  • 感谢@matt。我正忙着为互联网的未来哭泣,没有注意到我把 javascript: 部分留在了那里
  • 好吧,我知道现在这怎么行不通了。我会尝试使用 AJAX。谢谢您的帮助。 :)
【解决方案2】:

您是否尝试过这样做:

echo '<script type="text/javascript"> flashContent(); </script>';

代替:

javascript:flashContent();

【讨论】:

    【解决方案3】:

    我认为没有像 javascript: functionName()..这样的东西。

    Javascript 在用户空间中运行,由浏览器解释。

    PHP 在服务器空间中运行,并由预处理器处理。

    您应该在 PHP 中测试用户名和密码,如果错误,则向客户端发送 JSON 回复。在客户端中,解析 JSON 数据并显示相应的消息。您可能希望使用 AJAX 来执行此操作。

    希望有效

    【讨论】:

      【解决方案4】:

      您不能使用 php 调用像这样的 Javascript 函数,您需要在 javascript 中回显调用该函数的脚本。这样的事情可能会奏效:

      <?php
      echo '<script> window.onload = function(){ flashContent(); } </script>';
      ?>
      

      但这可能不是一个好方法。在 javascript 在浏览器上运行之前,php 在服务器上运行。让两种语言进行通信的一种更好的方法是将 AJAX 调用发送到 php 脚本。

      编辑 澄清一下:您可以在脚本中回显对 Javascript 函数的调用,它将在您回显它的地方运行。但是在这里,php 仍然只是将 Javascript 视为要打印在文档上的字符串。

      【讨论】:

        猜你喜欢
        • 2013-04-19
        • 1970-01-01
        • 1970-01-01
        • 2012-12-30
        • 1970-01-01
        • 1970-01-01
        • 2015-06-01
        • 2013-06-03
        • 1970-01-01
        相关资源
        最近更新 更多