Php 在jQuery ajax数据中发送布尔值

Php 在jQuery ajax数据中发送布尔值,php,jquery,ajax,json,boolean,Php,Jquery,Ajax,Json,Boolean,我在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.p

我在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']);
}

但是
$\u POST['undo\u vote']==true
条件始终满足

帖子就是文本,文本在php中的计算结果为true。一个快速的解决方法是发送一个0而不是false。您还可以在PHP中的true周围加引号

if ($_POST['undo_vote'] == "true") {
    Photo::undo_vote($_POST['photo_id']);
} else {
    Photo::vote($_POST['photo_id'], $_POST['vote']);
}
然后您可以传入真/假文本。如果你喜欢的话

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

data:JSON.stringify(JSON)

并在服务器上对其进行解码:


$data=json_decode($_POST)

您可以使用0和1进行撤销投票,并在php中键入cast:

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 
}

您是否尝试过
if($\u POST['undo\u vote']='true'){
?(我希望请求参数作为字符串接收,除非您在测试单个属性之前传递JSON字符串并在服务器端解析它。)是的,变量作为字符串发布。测试字符串“false”始终为true。n是对的。所有GET/POST参数都是字符串,
为false
是一个真实的值。这里可能会找到一个好答案的副本:将布尔值作为0或1发送是一种不好的做法吗?我应该做一些JSON编码,还是做一些其他事情来增强类型?顺便说一句,你的答案是正确的,有效的,只需要8分钟就可以接受:)@DonnyP这真的是一个品味问题。大多数程序员都知道1和0如何处理true/false,但取决于使用JSON的位置,使用JSON可能更为清晰。传统的(pre-JSON,pre-REST)方法将包括
undo\u-vote:1
处理true,并将
undo\u-vote
全部排除在false之外。然后,服务器端booleanize
$\u-POST['undo\u-vote']
这取决于它是否存在(并且可以选择将“0”和“false”解释为false)。对于像这样简单的问题,我今天可能仍然使用这种方法。