设置PHP $_SESSION['username']Post调用和回调方法


Setting a PHP $_SESSION['username'] using a jQuery $.post call and a callback method

我已经研究并玩了相当多,但我被难住了。从本质上讲,我想设置我的网站,这样它就可以检测用户是否"登录",从而改变它的外观:删除"登录"链接,代之以"注销"链接,等等。

为了测试的目的,我开始我的index.html页面:

<?php 
session_start(); 
$_SESSION["username"]="javaman";
?>
接下来,从jquery文档中调用setup函数。ready:
$(document).ready(function() {
    setup_page();
};

设置函数如下:

function setup_page()
{
    var username = get_user();
    //check for error
    var index = username.indexOf("error");
    //if not an error
    if(username.length > 0 && index == -1)
    {
        //do the jquery calls to hide/show links
    }
}

get_user函数是这样的

function get_user()
{
    var result;
    $.post("./session.php", {action : "get", key : "username", value : "val"}, function(data){
            result = data;
        });
    return result;
}

session.php是一个简单的应用程序,它接受3个post值,并希望吐出适当的结果,我遇到的问题是js结果变量通常是未定义的,特别是当我通过IE开发工具栏进行调试时。不过FF看起来还行。我是否以正确的方式使用回调?我试过把alert()函数放在任何地方,以找出代码搞砸的地方,但这也没有帮助,因为警报经常说结果是未定义的。同时,似乎get_user调用post函数,但堆栈立即返回,并且永远不会返回语句,直到get_user返回值…未定义的。我相信我误解了这里的代码流。我习惯用C语言,逻辑上一个函数跟着另一个函数。在这种情况下,我将回调解释为:

int I = callback_function(post("some data"));

所以在我看来,post完成了它的动作,然后调用另一个函数或至少执行另一个动作,然后完成,然后get_user可以返回它的值。

或者是操作顺序:post, get_user, callback?

Internet Explorer原生不支持数组上的indexOf。使用jQuery的$.inArray()代替:

var index = $.inArray("error", username);

请记住,AJAX代表异步 Javascript和XML。所以回调会在响应来的时候触发,但是其余的执行会继续。如果您想锁定执行直到ajax请求完成,请使用

$.ajaxSetup({async:false});