在jQuery Ajax中发送一个布尔值

j91ykkif  于 9个月前  发布在  jQuery
关注(0)|答案(4)|浏览(121)

我在一个Ajax调用中发送了一些数据。其中一个值是一个设置为TRUE的布尔值。在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条件总是满足的。

bz4sfanl

bz4sfanl1#

post只是文本,文本在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']);
}

字符串
然后你可以传入true/false文本。如果你喜欢的话。

0x6upsns

0x6upsns2#

你可以使用JSON.stringify()来发送请求数据:
第一个月
并在服务器上解码:
$data = json_decode($_POST) ;

rks48beu

rks48beu3#

你可以在undo_vote中使用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 
}

axr492tv

axr492tv4#

一个老问题,但也许这对JavaScript程序员有用:
我不想把 * 所有东西 * 都字符串化,因为我想要不带引号的数字和布尔值,带 * 一对 * 双引号的字符串,以及请求体中的对象。
jQuery Ajax不接受纯布尔值作为数据体,所以我这样做了:

if (jQuery.type(data) == 'boolean') {
        data = JSON.stringify(data);
    }

字符串
对我有用...

相关问题