在ajax中发送时无法获得正确的布尔值[重复]

Posted

技术标签:

【中文标题】在ajax中发送时无法获得正确的布尔值[重复]【英文标题】:Cannot obtain correct Boolean value when sent in ajax [duplicate] 【发布时间】:2013-08-22 23:20:06 【问题描述】:

假设我们有以下 ajax:

$.ajax(
    url:'myURL.php',
    data:
        ac:'do',
        isDoable:false
    
);

现在在后端读取呼叫数据时,isDoable 是一个字符串,并尝试将其转换为布尔值:

$isDoable = (bool) $_REQUEST['isDoable'];

导致$isDoable 始终为true,即使发送为false。 当我遇到这个问题时,我放弃了,只是将其视为字符串if($_REQUEST['isDoable'] == 'true')

但我无法克服它!为什么会出现这种意外行为,有没有办法解决?

【问题讨论】:

如何在php中将字符串转换为布尔值:***.com/questions/7336861/… 做一个var_dump($_REQUEST),你会看到到底发生了什么。如果JS将true编码为文字字符串'false',那么非空字符串将始终评估为布尔值@ 987654332@ 在 php 中。 查询字符串始终为字符串,格式始终为http://somedomain.com/ourpage?key=value。无论您使用 javascript 布尔值。从技术上讲,它只是一个字符串,只要它是一个查询字符串请求。您正在将 $ajax 与 Get 方法一起使用。因此它显然被视为字符串。你所做的正是正确的方法。 看到这个帖子:***.com/questions/3654454/… 【参考方案1】:

由于您没有通过 POST 发送 JSON 数据(可以使用 json_decode 正确处理),因此您的字符串 "true""false" 将始终是布尔值 true,因为 PHP 会假设,如非空字符串,您的 var 应转换为 true 布尔值。

所以,在你的情况下,你应该使用字符串比较。

例如:

$value = (bool)"test"; // whatever value, not empty string
var_dump($value);

是布尔值true

$value = (bool)"";
var_dump($value);

是布尔值false

【讨论】:

以上是关于在ajax中发送时无法获得正确的布尔值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Ajax接收后台发送过来的布尔值以及指定的字符串

为啥我无法将程序中找到的布尔结果的正确值分配给布尔变量并使用结果检查条件?

无法从 jQuery Ajax 调用中获得正确的返回值 [重复]

返回布尔值和消息的Pythonic方式[重复]

Lua,if语句成语无法返回正确的布尔值

PL/SQL 将字符串转换为布尔值