【问题标题】:Why are integers becoming strings when I POST using jquery.ajax to a PHP script当我使用 jquery.ajax 发布到 PHP 脚本时,为什么整数会变成字符串
【发布时间】:2014-04-01 07:28:22
【问题描述】:

我花了最后一个小时试图解决这个问题,但无济于事。关于 jQuery 和 ajax() 的 SO 上有很多帖子,但我一直无法找到一个解决我的特定问题的帖子。

我的代码的基础知识:

在客户端:

var data = {"id": 1};
j.ajax({
  type: "POST",
  url: "postTestingResult.php",
  data: {'data': data},
  dataType: "json",
  success: ajaxSuccess,
  error: ajaxError
});

在使用 PHP 的服务器上:

$data = $_POST['data'];
echo $data; //{"id": "1"}

为什么整数值变成了字符串?我该如何防止这种情况?我真的不想创建一个自定义函数来循环遍历我的数据对象(实际上这很复杂)来转换所有值。

非常感谢!

【问题讨论】:

  • 尝试在data变量上应用JSON.stringifydata: {'data': JSON.stringify(data)}
  • 查看我对@mesutozer 答案的评论

标签: javascript php jquery json


【解决方案1】:

当参数通过$_GET$_POST发送时,它们被解释为字符串

可能需要适当地投射它们以使其适合您的工作方式。

【讨论】:

  • 此外,为了使 JSON 有效,值也需要用引号括起来,这一事实非常清楚。
  • 如果你想转换你需要对它进行类型转换 $id = (int)$_POST["id"] ;
  • 这正是我不想做的(我在我的问题中这么说)。我不喜欢以 JSON 格式发送。我只需要发送数据对象,理想情况下让它解释它的发送方式,当然不需要我做太多额外的工作。
  • 恐怕不可能.. JSON 是一个被称为对象的notation(也就是..一个object形式的字符串)
  • 是的,但应该有一些服务器端可以正确解码 JSON。我无法相信每个发送复杂 JSON 对象的开发人员都必须编写一个自定义函数,其唯一目的是遍历整个对象以转换值。
【解决方案2】:

在你的情况下,你需要json_decode你收到的数据。然后,您将拥有通过 Ajax 发送的变量类型。

$data = json_decode($_POST['data'], true);
// $data['id'] is now int

$_POST['data'] 是一个字符串,如其他答案中所述,但是当您对其进行解码时,您可以内部元素获取它们的正确类型。

【讨论】:

  • 我试过了。我收到以下错误:“PHP 警告:json_decode() 期望参数 1 是字符串,给定数组”为了清楚起见,我的真实数据对象包含比单个键/值更多的内容,其中一些是嵌套对象/数组。
  • 这应该不是问题,只要它是 javascript 端的有效 JSON 对象。不知道为什么你会收到警告。你确定 json_decode 的参数 1(即 $_POST ['data']) 尚未解码?您可以尝试打印它以验证它是一个字符串吗?
  • 嗯。好决定。出于某种原因,它不是一个字符串——它是作为一个数组传入的。但我不确定为什么。我不应该将 jQuery ajax 调用设为 JSON 字符串吗?
  • 我认为我们错过了一件事。您能否按照@hindmost 的问题评论中的建议尝试 JSON.stringify
  • 我也试过这样做。这会导致 'id' 被转义,创建: {\\"id\\": 1} 我试图通过将 jQuery.ajax() 调用的 processData 参数设置为 false 来解决这个问题,但这会导致由于某种原因不存在 $_POST['data'] 是自己的问题
猜你喜欢
  • 2013-01-08
  • 1970-01-01
  • 2011-09-22
  • 2018-10-04
  • 2020-09-16
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
相关资源
最近更新 更多