Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在我使用jquery.ajax发布到PHP脚本时整数会变成字符串_Javascript_Php_Jquery_Json - Fatal编程技术网

Javascript 为什么在我使用jquery.ajax发布到PHP脚本时整数会变成字符串

Javascript 为什么在我使用jquery.ajax发布到PHP脚本时整数会变成字符串,javascript,php,jquery,json,Javascript,Php,Jquery,Json,我花了最后一个小时试图弄明白这一点,但毫无结果。关于jQuery和ajax()的文章很多,但我还没有找到一篇涉及我的具体问题的文章 我的代码的基础: 在客户机上: var data = {"id": 1}; j.ajax({ type: "POST", url: "postTestingResult.php", data: {'data': data}, dataType: "json", success: ajaxSuccess, error: ajaxError })

我花了最后一个小时试图弄明白这一点,但毫无结果。关于jQuery和ajax()的文章很多,但我还没有找到一篇涉及我的具体问题的文章

我的代码的基础:

在客户机上:

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"}
为什么整数值会变成字符串?我如何防止这种情况?我真的不想创建一个自定义函数来循环通过我的数据对象(实际上非常复杂)来转换所有的值


非常感谢

当通过
$\u GET
$\u POST
发送参数时,它们被解释为字符串


您可能需要适当地铸造它们,使它们适合您的工作方式

在您的情况下,您需要对收到的数据进行解码。然后,变量的类型将与通过Ajax发送的类型相同

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

$\u POST['data']
是一个字符串,正如其他答案中所解释的那样,但是当您解码它时,您可以获得内部元素的正确类型。

此外,为了使JSON有效,值还需要用引号括起来,这一点非常清楚。如果您想要转换,您需要将其类型转换为$id=(int)$\u POST[“id”];这正是我不想做的(我在问题中也这么说过)。我不想以JSON的身份发送。我只需要发送数据对象,理想情况下让它按照发送的方式进行解释,当然我不需要做太多额外的工作。恐怕这是不可能的。。JSON是一种称为对象表示法(即..字符串形式的对象)是的,但是服务器端应该有一些东西可以正确解码JSON。我不敢相信,每个发送复杂JSON对象的开发人员都必须编写一个自定义函数,其唯一目的就是遍历整个对象以转换值。请尝试在
data
variable:
data:{'data':JSON.stringify(data)}上应用
JSON.stringify
请参见我对@mesutozerI的回答的评论,我已经尝试过了。我得到了以下错误:“PHP警告:json_decode()期望参数1是字符串,数组给定”只是为了澄清,我的真实数据对象包含的远不止一个键/值,其中一些是嵌套对象/数组。只要它是javascript端的有效json对象,这应该不会有问题。。不知道你为什么会收到警告。。您确定json_decode(即$u POST['data'])的参数1尚未解码吗?你能试着打印它来确认它是字符串吗?嗯,好主意。出于某种原因,它不是一个字符串,而是作为一个数组出现的。但我不知道为什么。jQueryAjax调用我不应该把它变成JSON字符串吗?我想我们错过了一件事。你能试试JSON.stringify吗?正如@hindmostI在你的问题评论中所建议的那样,你也试过这么做。这会导致对“id”进行转义,创建:{\\\\\”:1}我试图通过将jQuery.ajax()调用的processData参数设置为false来解决这个问题,但这会导致它自身的问题$\u POST['data']由于某种原因不存在