【问题标题】:=== in javascript and response returned from php ajax file=== 在 javascript 中和从 php ajax 文件返回的响应
【发布时间】:2015-10-20 15:47:17
【问题描述】:

我使用 jQuery 通过$.post 在 PHP 文件中发送一个值。

$.post("ajax/comment_delete.php", { 
    comment_id: comment_id
}, function(response){/
    if (response == true) {
        tr.fadeOut(500, function() {
            tr.remove();
        })
    }
})//$.post

在 PHP 文件中我有:

if (isset($_POST['comment_id'])) {
    $comment_id = (int)$_POST['comment_id'];
    $comment = comment::find_by_id($comment_id);
    if (is_object($comment)) {
        echo $comment->delete();
    }
}

一切正常,除了当我使用response===true 时它不起作用。如果评论被删除,我的删除方法将返回 true。当我alert 回复时,它显示11===true 为假正常吗?还是有什么问题?

【问题讨论】:

  • console.log("1"==true); console.log("1"===true); 类型凝聚力
  • ^ 这个。 === 检查完全匹配,所以你基本上是在说 response 是否是 true 的布尔值,它永远不会是。 == 同时检查响应是否为truthy
  • @neilsimp 检查是否完全匹配,所以你基本上是在说 response 是否是 true 的布尔值,它永远不会是。为什么? php 发送 true 为 1?
  • 我怀疑使用 == 因为它可能 php 发送错误字符串和字符串计数为 true
  • @peyman 你刚才说 php 发送 true 为 1,在 JavaScript 中 "1"true 不同,因为它们的类型不同。如果 PHP 发送 "1" 为 true 为什么不检查 response === "1"

标签: javascript php jquery ajax type-coercion


【解决方案1】:

正常吗?还是有什么问题?

这很正常。

服务器端代码发出值 "1"(或 1? 对于此比较的目的并不重要),以及这是否是你想要你的要发出的服务器端代码完全是另一回事。但只要 是它发出的内容,JavaScript 就会在这里正常运行。

"1" is "truthy" in JavaScript。这意味着"1" 可以被视为true 用于与布尔值进行基本比较。但是,"1"true类型不同,因此不满足更严格的比较 (===)。

简而言之:

  • "1" == true -> 是的
  • "1" === true -> 没有

【讨论】:

  • 所以如果从 php 文件中发出错误字符串,它就已经是真的了,不是吗?
  • @peyman:嗯,是的。对于与布尔值的基本比较,任何非空字符串都被认为是“真”。您的所有客户端代码现在所做的就是检查是否收到任何非空响应。如果您想传达更多信息,请不要依赖简单的布尔值。对于错误,请使用 HTTP 错误代码并将任何消息包含在响应中更结构化的对象中。然后你的客户端代码可以检查这些东西。
猜你喜欢
  • 2014-04-26
  • 1970-01-01
  • 2014-09-11
  • 2020-04-15
  • 2013-06-03
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-09-11
相关资源
最近更新 更多