【问题标题】:Send a boolean value in jQuery ajax data在 jQuery ajax 数据中发送一个布尔值
【发布时间】:2013-01-20 22:08:51
【问题描述】:

我在 Ajax 调用中发送一些数据。其中一个值是设置为 FALSE 的布尔值。在 Ajax 调用的 PHP 脚本中,它总是被评估为 TRUE。有任何想法吗?

$.ajax({
    type: "POST",
    data: {photo_id: photo_id, 
           vote: 1, 
           undo_vote: false},   // This is the important boolean!
    url: "../../build/ajaxes/vote.php",
    success: function(data){
        console.log(data);
    }
}); 

在上面Ajax中调用的脚本vote.php中,我检查了布尔值:

if ($_POST['undo_vote'] == true) {
    Photo::undo_vote($_POST['photo_id']);
} else {
    Photo::vote($_POST['photo_id'], $_POST['vote']);
}

$_POST['undo_vote'] == true 条件总是满足的。

【问题讨论】:

标签: php jquery ajax json boolean


【解决方案1】:

帖子只是文本,而文本在 php 中的评估结果为真。一个快速的解决方法是发送一个零而不是错误。你也可以在 PHP 中为你的 true 加上引号。

if ($_POST['undo_vote'] == "true") {
    Photo::undo_vote($_POST['photo_id']);
} else {
    Photo::vote($_POST['photo_id'], $_POST['vote']);
}

然后你可以传入真/假文本。如果那是你喜欢的。

【讨论】:

  • 将布尔值发送为 0 或 1 是不好的做法吗?我应该做一些 JSON 编码,还是做其他事情来使类型更强大?
  • 你的答案是正确的,顺便说一句,只需要8分钟接受:)
  • @DonnyP 这真的是品味问题。大多数程序员都知道 1 和 0 如何用于判断真/假,但根据使用它的位置,使用 JSON 可能更清楚。
  • 传统的(pre-JSON,pre-REST)方法是包含undo_vote: 1 为真,完全排除undo_vote 为假。然后,服务器端布尔化 $_POST['undo_vote'] 取决于它是否存在(并且可以选择将 '0' 和 'false' 解释为 false)。对于像这样简单的事情,我今天可能仍然使用这种方法。
【解决方案2】:

您可以使用 JSON.stringify() 发送请求数据:

data : JSON.stringify(json)

并在服务器上解码:

$data = json_decode($_POST);

【讨论】:

    【解决方案3】:

    您可以将 0 和 1 用于 undo_vote 并在 php 中输入:

    JS端:

    undo_vote: 0 // false
    

    服务器端:

    $undovote = (bool) $_POST['undo_vote']; // now you have Boolean true / false
    
    if($undovote) {
        // True, do something 
    } else {
       // False, do something else 
    }
    

    【讨论】:

      猜你喜欢
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 2016-07-22
      • 2016-11-01
      • 1970-01-01
      相关资源
      最近更新 更多