Установка PHP $ _SESSION ['username'] с использованием вызова jQuery $ .post и метода обратного вызова - PullRequest
1 голос
/ 15 августа 2011

Я исследовал и играл немного, но я в тупике.По сути, я хочу настроить свой сайт так, чтобы он мог определять, вошел ли пользователь в систему, и, таким образом, изменять его внешний вид: удаление ссылки «Войти» и замена ссылки «Выход» и т. Д.

В целях тестирования я начал свою страницу 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 значения столбца и, как мы надеемся, выплевываетПравильный результат, проблема, с которой я сталкиваюсь, заключается в том, что переменная результата js часто не определена, особенно когда я отлаживаю через панель инструментов IE dev.FF, кажется, хорошо, хотя.Я правильно использую обратный вызов?Я пытался разместить функции alert () повсюду, чтобы выяснить, где искажается код, но это тоже не помогает, так как часто оповещение говорит, что результат не определен.Между тем, похоже, что get_user вызывает функцию post, но стек немедленно возвращается и никогда не попадает в оператор return, пока ПОСЛЕ того, как get_user не вернет значение .. undefined.Я считаю, что я неправильно понимаю поток кода здесь.Я привык к C, где логически одна функция следует за другой.В этом ключе я интерпретирую обратный вызов, по сути, как:

int i = callback_function (post ("некоторые данные"));

Так что, на мой взгляд, сообщение завершает свое действие и затем вызывает другую функцию или, по крайней мере, выполняет другое действие, а затем оно завершается, и затем get_user может возвращать его значение.

Или это порядокоперация: post, get_user, callback?

... запутался в Сиэтле

Ответы [ 2 ]

0 голосов
/ 15 августа 2011

Имейте в виду, что AJAX означает Асинхронный Javascript и XML. Поэтому обратный вызов срабатывает, как только приходит ответ, но остальная часть выполнения продолжается. Если вы хотите заблокировать выполнение до завершения AJAX-запроса, используйте

$.ajaxSetup({async:false});

до вызова AJAX.

0 голосов
/ 15 августа 2011

Internet Explorer изначально не поддерживает indexOf для массивов. Вместо этого используйте jQuery's $.inArray():

var index = $.inArray("error", username);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...