javascript奇怪的字符串比较[重复]
Posted
技术标签:
【中文标题】javascript奇怪的字符串比较[重复]【英文标题】:javascript strange comparison of strings [duplicate] 【发布时间】:2014-10-22 21:34:31 【问题描述】:我有一个 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"
为 false。
谁能解释一下?
【问题讨论】:
我的问题是什么时候你会尝试console.log(response)
吗?
"type":"success"
... type == "error"
嗯...您显然遗漏了一些东西,因为您的示例完全关闭了。如果没有更详尽的示例,就无法判断是什么。
【参考方案1】:
如果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?
【讨论】:
我尝试手动解析 JSON 但它没有改变任何东西,将“json”移动到 .post 方法也没有做任何事情。我在 if 语句之前 console.log 响应然后我 console.log( response.type ) // "error" 然后我 console.log( response.type != "error" ) // trueconsole.log( response.type.length )
输出什么?
它输出“找不到未定义的属性长度”。我只写了 JSON.parse(response) 而没有将它分配给任何有问题的东西。谢谢!以上是关于javascript奇怪的字符串比较[重复]的主要内容,如果未能解决你的问题,请参考以下文章