【问题标题】:Cannot obtain correct Boolean value when sent in ajax [duplicate]在ajax中发送时无法获得正确的布尔值[重复]
【发布时间】: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中将字符串转换为布尔值:stackoverflow.com/questions/7336861/…
  • 做一个var_dump($_REQUEST),你会看到到底发生了什么。如果JS将true编码为文字字符串'false',那么非空字符串将始终评估为布尔值@ 987654332@ 在 php 中。
  • 查询字符串始终为字符串,格式始终为http://somedomain.com/ourpage?key=value。无论您使用 JavaScript 布尔值。从技术上讲,它只是一个字符串,只要它是一个查询字符串请求。您正在将 $ajax 与 Get 方法一起使用。因此它显然被视为字符串。你所做的正是正确的方法。

标签: php javascript jquery ajax boolean


【解决方案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

【讨论】:

    猜你喜欢
    • 2019-02-25
    • 2018-06-30
    • 2020-08-07
    • 2011-04-02
    • 2011-12-27
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多