在jQuery ajax数据中发送一个布尔值

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

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

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

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

post只是文本,文本将在php中评估为true。 快速解决方法是发送零而不是假。 您也可以在PHP中使用引号括起来。

 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用于undo_vote并在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 }