javascript奇怪的字符串比较

时间:2014-08-28 21:57:28

标签: javascript ajax

我有一个ajax函数,可以向某个地方发送电子邮件,并从类型=成功或错误的json对象接收来自服务器的响应

$("#submit_btn").click(function(event) { 
    event.preventDefault();

    var post_data = {
        'email': $("#email").val()
    };
    $.post( "sendEmail.php", post_data ).done(function(response){
        if(response.type == 'success'){
            $("#sentmail").fadeIn("slow")
            setTimeout(function(){
                $("#mail").val("Enter your email here");

                $("#sentmail").fadeOut("slow")  
            },3000);
        }
        else{
            $("#sentmailfail").fadeIn("slow")
            setTimeout(function(){
                $("#mail").val("Enter your email here");

                $("#sentmailfail").fadeOut("slow")  
            },3000);
        }
    },"json")
});

有趣的是,如果我console.log(response)我获得{"type":"success","desc":"something"},然后直接console.log( (response.type == "error") ) // TRUE

如果我从响应中获取安慰日志并将其分配给变量a = {"type":"success","desc":"something"},则a.type == "error"为假。

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:4)

如果console.log(response)的输出是

{"type":"success","desc":"something"}

然后response很可能仍然是一个字符串(包含JSON),而字符串没有type属性:

> "foo".type == "error" // `undefined` is never equal to a string
false

对象在控制台中的外观通常不同:

> console.log({"type":"success","desc":"something"})
Object {type: "success", desc: "something"} // in Chrome and Firefox at least

解决方案:首先解析字符串:

response = JSON.parse(response);

与jQuery相关:

我注意到你打算让jQuery为你解析JSON,但是你将"json"传递给了错误的函数。您必须将其传递给$.post(...),而不是.done(...)

$.post("sendEmail.php", post_data, "json").done(...);
// instead of 
// $.post("sendEmail.php", post_data).done(..., "json");

然后您不需要手动解析它。


相关:Parse JSON in JavaScript?