т.е. не понимает «ложь» из строки JSON? - PullRequest
2 голосов
/ 25 июня 2010

У меня есть некоторый php, который проверяет, вошел ли пользователь в систему и возвращает ложь, затем он передается через браузер через ajax, чтобы пользователь знал, что ему нужно войти.

Отлично работает в FF, и предупреждение возвращает 'true' , но в IE оно возвращает 'null ' независимо от того, что я делаю

// Check for logged in user
    $.getJSON(baseUrl+"index.php/login/checkState", function(data) {
                    alert(data);
        if(data==true){
            dologInState();
        }else{
            dologOutState();
        }
    });

PS: строка, возвращаемая из PHP, просто ложна

Есть идеи?

Ответы [ 2 ]

8 голосов
/ 25 июня 2010

Если ваш JSON действителен (см. json.org и JSONlint ), data будет объектом или массивом, а не флагом.

Строка false сама по себе недопустима в формате JSON. Верхним уровнем в нотации JSON всегда является объект ({ ... }) или массив ([ ... ]). Чтобы сделать его действительным JSON, вы можете сделать это:

{"success": false}

... а затем проверить

$.getJSON(baseUrl+"index.php/login/checkState", function(data) {
    alert(data);
    if(data.success){   // <== Note here we're checking the `success` property of the deserialized object
        dologInState();
    }else{
        dologOutState();
    }
});

Некоторые парсеры "JSON" на самом деле полны Выражение JavaScript парсеры (в основном это просто eval, хотя это опасно), которые могут интерпретировать строку false так, как вы намереваетесь, но Вы не можете полагаться на это (потому что правильный синтаксический анализатор отклонит его).

0 голосов
/ 28 июня 2010

Мне в итоге удалось разобраться с этим. Проблема заключалась не в вызове ajax.

Дело в том, что ajax-вызовы получали свои истинные и ложные значения от php, выполняя простую проверку "присутствует файл cookie аутентификации".

Я не могу сказать вам, как или почему это работало в FF и действовало в IE, и это могло быть чем-то, что я сделал - но - так как 90% приложения построено из js и вызовов ajax, решение было обработать все проверки файлов cookie с помощью сценария Java, а не с помощью PHP вообще.

У меня даже есть печенье, чтобы хранить строки json, это прекрасно.

Спасибо за помощь, ребята, очень признателен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...