2012-12-11 76 views
0

Possible Duplicate:
How to call a JavaScript function from PHP?调用JavaScript功能块

我工作的学校项目,以及我与登录页面挣扎。在我的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()

如何我解决这个问题吗?

+2

您还想查看[在​​Meta上的这个问题](http://meta.stackexchange.com/a/5235/135887)关于您名下的大胖橙色“0%”如何影响您的能力得到答案。 – Charles

+0

您将Javascript用作客户端语言,将PHP用作服务器端语言。您不能从另一种语言中直接调用方法。 –

+0

你知道JS和PHP在完全不同的上下文中操作吗?一个是客户端(浏览器),JS,另一个是服务器端PHP。如果你需要一个PHP脚本来验证你的表单服务器端,那么你有两种选择,向PHP脚本发出一个AJAX请求,并让JS做相应的处理,或者将表单提交给PHP脚本并输出一些HTML/JS会做你所需要的。在另一个里面没有呼叫者。 – thescientist

回答

2

你试图调用服务器端脚本客户端功能。你可以这样做:

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

但它可能是更明智的逻辑阻止你尝试编写服务器端处理这样的方式居然分开。组织能力在这项业务中有很长的路要走。

+0

确切地说,你可以,但你应该:) – Juan

+1

谢谢@matt。我忙于为互联网的未来而哭泣,注意到我在那里留下了javascript:部分 –

+0

好吧,我意识到现在这是行不通的。我会尝试使用AJAX。谢谢您的帮助。 :) – Ben

1

你有没有试着这样做:

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

相反的:

javascript:flashContent(); 
0

我不认为有像JavaScript这样的事情:使用functionName()..

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

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

你应该做的是在PHP中测试用户名和密码,如果他们错了,则向客户端发回JSON回复。在客户端中,解析JSON数据并显示相应的消息。你可能想用AJAX来做到这一点。

希望的作品

0

不能调用JavaScript函数一样,用PHP,你需要回声出脚本中调用JavaScript中的功能。像这样的东西可能会奏效:

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

但是,这可能不是做一个伟大的方式。在浏览器上运行JavaScript之前,PHP会在服务器上运行。让两种语言交流的一个更好的方法是将AJAX调用发送到php脚本。

编辑 澄清:您可以重复进行调用的脚本中的JavaScript功能,并且将运行在您回应它。但是,在这里,PHP仍然会将Javascript作为字符串打印在文档上。