Javascript 为什么在我使用jquery.ajax发布到PHP脚本时整数会变成字符串
我花了最后一个小时试图弄明白这一点,但毫无结果。关于jQuery和ajax()的文章很多,但我还没有找到一篇涉及我的具体问题的文章 我的代码的基础: 在客户机上: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 })
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']由于某种原因不存在