有没有办法让函数在完成后立即采取行动?

时间:2014-02-17 00:56:11

标签: javascript php html mysql ajax

我有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;
}

1 个答案:

答案 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}}