我有SIGN IN
按钮,onclick
调用函数login()
。在login()
里面我调用了2个函数:
function login()
{
signin();
statistics_table();
return false;
}
signin();
执行实际签名($_SESSION['name']=$username;
)(ajax
),statistics_table();
打印出与用户相关的表格或“的文字请登录以查看您的统计信息“(如果登录无效)(ajax
也是如此)。
问题是statistics_table()
始终打印“请登录...”。好像signin()
尚未执行实际签名。显然它只在函数login()
返回后执行它。
那么有没有办法让signin()
在完成后立即应用它?
我还尝试按钮一个接一个地调用函数signin()
和statistics_table()
,如下所示:
<input type="submit" value="Sign In" onclick="signin(); statistics_table();">
但这种方式当我点击按钮它有点重新加载页面(再次,我需要它是ajax)。
提前致谢
修改
以下是signin()
的实施:
function signin()
{
var name = document.getElementById('name').value;
var pw= document.getElementById('password').value;
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("Test").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","members.php?name="+name+ "&password="+pw,true);
xmlhttp.send();
return false;
}
答案 0 :(得分:1)
您只需要移动statistics_table()
调用 onreadystatechange
readyState == 4
回调内的xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
// You're already writing some output with the XHR response
document.getElementById("Test").innerHTML=xmlhttp.responseText;
// So no problem writing a little more in the user's table:
statistics_table();
}
}
,因此在成功完成用户登录后调用它。< / p>
login()
然后调用者function login()
{
signin();
return false;
}
缩减为:
POST
另一个问题:我注意到您正在尝试发起$_GET
请求,但事实上您正在传递查询字符串中的参数,其中PHP将以.send()
的形式接收它们。参数属于xmlhttp.open("POST","members.php", true);
// Set the correct Content-type header for a POST form
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("name=" + encodeURIComponent(name) + "&password="+encodeURIComponent(pw));
的参数:
{{1}}