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

标签 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;
}

最佳答案

您只需将 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();
    }
}

然后调用者 login() 被缩减为:

function login()
{
    signin();
    return false;
}

另一个问题:我注意到您正在尝试发起一个 POST 请求,但实际上您是在查询字符串中传递参数,PHP 将在其中以 $_GET 的形式接收它们。参数不是查询字符串,而是属于 .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));

关于javascript - 有没有办法让函数在完成后立即采取行动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21819012/

相关文章:

javascript - 拉取alt的值

javascript - angularjs:将背景大小从覆盖更改为包含

javascript - jquery 中的选择器函数

php - htaccess 漂亮的 URL 在 PHP MVC 中不显示任何 css 或图像

javascript - 如果不存在 php,则在不同的文件夹中创建 txt 文件

php - 如何更新表中显示的数据库记录

c# - 带有鼠标悬停的列标题的 gridView 定义

javascript - 我应该在 React 组件中初始化一个空状态变量吗?

javascript - Angular : pass data when doing a $location. 路径()

php - 在 PHP 中重置/删除数组中的所有值