AJAX调用不执行JavaScript函数。为什么?变通?

时间:2011-04-28 19:31:40

标签: php javascript ajax

我通过AJAX调用* POST *访问PHP登录脚本。成功后,我需要调用JavaScript函数loggedIn()。我试过打印......

<script type="text/javascript">loggedIn();</script>

...作为div的.innerHTML,以及在div标记上尝试onload=""事件。这两种方法都不允许我调用JavaScript函数。我可以在div中打印一个字母并在onclick=""事件上执行它,但是我试图摆脱的整个事实实际上是必须点击任何东西。基本上,我想要header("...")重定向(这也行不通)。

首先,有人可以解释实际发生的事情吗?我的赌注是AJAX的异步性质。其次,有没有人知道我可能会采用的工作在成功后刷新页面?

一如既往地谢谢 ž@ķ!

4 个答案:

答案 0 :(得分:2)

将一大块javascript转储到div中不会自动运行它。这样的事情只在页面生成时才有效。您需要在处理之前定义函数,当它从服务器获得成功通知时,它们会在您的ajax处理程序中执行简单的loggedIn()调用。

答案 1 :(得分:0)

看看jQuery和它的$ .ajax()函数。它将使用onSuccess处理程序完成你正在寻找的东西。

答案 2 :(得分:0)

你问发生了什么 - 如果没有看到你的代码,我无法告诉你。这是我期望发生的事情。

您的主页(index.php)可能包含一个包含用户名和密码字段的表单,以及一个用于提交表单的按钮。 Index.php可能只包含登录屏幕,或者表单可能只是一个小选项。

a)用户输入他的用户名和密码,然后单击登录按钮。然后将数据发布到服务器,发布到表单标记中设置的URL。

b)这个php脚本验证用户名和密码(小心加密密码 在查找数据库中的用户记录之前,所以密码不存储在纯文本中)。

c)如果用户和密码可以接受,则存储会话变量,并生成“开始”屏幕。如果不是,则再次生成登录屏幕,并显示错误消息(不承认哪个是错误的)。

d)由于代码存在,会话将被保存,生成的屏幕将自动发送到浏览器。

e)必须受登录保护的所有页面必须执行session_start()并在未设置logged_in标志时显示登录屏幕。一种简单的方法是重定向到主页。

不要使用AJAX来处理登录屏幕,因为如果验证失败,则需要显示不同的屏幕。 AJAX意味着你必须在登录之前已经将密码保护屏幕发送给用户,这是一个坏主意。对于登录,AJAX什么也得不到。

AJAX有用的地方是您需要将数据发送到服务器进行存储,以防客户端崩溃。当客户端在某些用户输入后需要一些额外数据时,AJAX也很有用。例如,在结账时,用户进入他的国家,然后页面使用AJAX获取邮资费用。

答案 3 :(得分:0)

// Create a callback handler
xmlHttp.onreadystatechange = function () {
    // readyState == 4 | The request is complete
    // status == 200 | Request completed successfully.The page is found and displayed.
    if ( xmlHttp.readyState == 4 && xmlHttp.status == 200 ) {
        if (xmlHttp.responseText == "SUCCESS") {
            document.location.href = redirect_url;
        } else {
            var elemObj = document.getElementById(div_id);
            elemObj.innerHTML = xmlHttp.responseText;
        }
    }
}

在我的正常回调处理程序中,我添加了...

        if (xmlHttp.responseText == "SUCCESS") {
            document.location.href = redirect_url;
        }

由于HTML是一个字符串,而“SUCCESS”是一个字符串,我不需要做任何不同的事情,除了检查“SUCCESS”的登录操作的结果。然后使用document.location.href将页面重定向到适当的URL。

这适用于我的应用程序。谢谢大家的意见!

〜Z @ķ!