11

我在 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条件总是满足的。

4

3 回答 3

15

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

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

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

于 2013-02-05T21:01:35.897 回答
2

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

data : JSON.stringify(json)

并在服务器上解码:

$data = json_decode($_POST);

于 2016-08-12T07:10:04.030 回答
2

您可以将 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 
}
于 2016-10-13T09:56:40.277 回答