【问题标题】:Setting a PHP $_SESSION['username'] using a jQuery $.post call and a callback method使用 jQuery $.post 调用和回调方法设置 PHP $_SESSION['username']
【发布时间】:2011-08-15 04:08:38
【问题描述】:

我已经研究并玩了很多,但我很难过。本质上,我想设置我的网站,以便它可以检测用户是否“登录”,从而改变它的外观:删除“登录”链接并用“退出”链接替换它,等等。

出于测试目的,我开始我的 index.html 页面:

<?php 
session_start(); 
$_SESSION["username"]="javaman";
?>

接下来,我从 jquery document.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 dev 调试时工具栏。不过FF好像还可以。我是否以正确的方式使用回调?我尝试将 alert() 函数放在任何地方,以找出代码出错的地方,但这也无济于事,因为警报经常说结果未定义。同时,似乎 get_user 调用了 post 函数,但堆栈立即返回并且永远不会到达 return 语句,直到 get_user 返回一个值......未定义。我相信我误解了这里的代码流。我习惯了 C 语言,其中一个函数在逻辑上跟随另一个函数。在这种情况下,我将回调解释为:

int i = callback_function(post("一些数据"));

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

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

...在西雅图迷茫

【问题讨论】:

  • 我不会全部使用js,因为它不安全,用php检查会话,并适当地构建页面。

标签: php jquery session post callback


【解决方案1】:

Internet Explorer 本身不支持阵列上的indexOf。改用 jQuery 的 $.inArray()

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

【讨论】:

  • 啊,谢谢!是否有指定 IE 支持和不支持的资源?或者 jQuery 是否有关于使用哪些函数来支持尽可能多的浏览器的文档?
  • 那里有很多资源。暂时想不出有什么具体的。附:如果我的回答解决了您的问题,请接受它作为正确答案 - 通过单击我的答案左侧的复选标记 - 以便其他访问此帖子的人知道这是正确答案。
  • @Steve indexOf 函数是原生 javascript 函数,与 jquery 无关。完全愚蠢的 IE 故障。
  • 罗杰,确保使用正确功能的最佳方法是什么?是否有一些 if 语句可以包含在我的代码中,如果浏览器是 IE,我将使用 inArray(),否则我可以使用 indexOf?
  • $.inArray() 在所有其他浏览器中也可以正常工作。无需使用不必要的条件语句污染您的代码。
【解决方案2】:

请记住,AJAX 代表 Asynchronous Javascript 和 XML。因此,一旦响应到来,回调就会触发,但其余的执行会继续进行。如果要在 AJAX 请求完成之前锁定执行,请使用

$.ajaxSetup({async:false});

在 AJAX 调用之前。

【讨论】:

  • 所以每当我希望网站等到 ajax 完成时,我需要使用 ajaxSetup?如果我使用它,我是否必须 $.ajaxSetup({async:true});紧接着?
  • 或者使用带有 async 选项的 $.ajax()。
  • 虽然 $.post() 是 $.ajax() 的简写方法,所以您可以尝试将 async:false 选项添加到您的 post 调用中,它也可以工作。
猜你喜欢
  • 2010-10-11
  • 2017-03-06
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多