即不理解JSON字符串中的'false'?

时间:2010-06-24 22:32:03

标签: jquery ajax json

我有一些php检查用户是否登录并返回false,然后通过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 个答案:

答案 0 :(得分:8)

如果您的JSON有效(请参阅json.orgJSONlint),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你想要的方式,但你不能依赖它(因为正确的解析器会拒绝它)。

答案 1 :(得分:0)

我最终设法解决了这个问题。问题不是开始时的ajax调用。

这是ajax调用从php中获取其真实和错误值,做一个简单的“是验证cookie存在”检查。

我无法告诉你这是怎么或为什么这个在FF中运行并在IE中运行它可能是我做过的事情 - 但是 - 因为90%的应用程序是由js和ajax调用构建的,所以解决方案是处理使用Java脚本进行所有cookie检查,而不是使用PHP。

我甚至现在已经有了存储json字符串的cookie,它很漂亮。

感谢所有帮助人员,非常感谢。