【问题标题】:Integers and booleans posted via $.ajax converted to strings by PHP通过 $.ajax 发布的整数和布尔值由 PHP 转换为字符串
【发布时间】:2018-08-26 03:09:06
【问题描述】:

我有一些相当标准的 jQuery:

$.ajax({
    type: 'POST',
    url: myurl,
    dataType: 'JSON',
    data: {
        id: 5,
        status: true
    }
});

当 PHP 接收到它并自动解码 JSON 数据时,整数和布尔值将转换为字符串。这是个坏消息,因为后面还有一些函数可以检查类型等价性。

有什么想法可以让 PHP 很好地解码吗?

【问题讨论】:

  • HTTP 请求的基本性质是 所有 参数都是字符串。 ajax 选项的“dataType”属性说明了您期望 return 数据的样子。您的输入参数将作为 POST 正文中的普通查询字符串发送。
  • 从表单收到值后,为什么不直接将值转换为它们各自的类型?这样,您将使用正确的类型转发数据。例如在php中:$id = (int) $_POST['id'];
  • @muhammad,我想在一天结束时我可以做到,只是不知道我是否遗漏了什么。 ??????
  • @BenjaminAllison 检查下面的答案以获得保留类型的另一个选项。

标签: javascript php jquery ajax casting


【解决方案1】:

你可以这样做:

$.ajax({
  type: 'POST',
  url: myurl,
  contentType: 'application/json',
  data: JSON.stringify({
    id: 5,
    status: true
  })
});

然后在 PHP 方面:

$input = file_get_contents('php://input');
$object = json_decode($input);

在这种情况下,$object->status 应该是一个布尔值(其余数据也应该保持其原始类型)。

虽然不确定这是否值得。您可以像其他人提到的那样简单地检查类型与它们应该是什么。 filter_var 是一种可靠的方法。

【讨论】:

    猜你喜欢
    • 2012-03-10
    • 2013-12-03
    • 2011-11-12
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2012-12-16
    • 1970-01-01
    相关资源
    最近更新 更多