从Javascript到PHP的JSON POST
我试图通过Javascript将JSON字符串发送到PHP脚本。不幸的是它是空的。我已经检查了谷歌上的一百个网站,但我找不到解决问题的办法。以下是我正在做的: 我的HTML/Javascript:从Javascript到PHP的JSON POST,javascript,php,post,Javascript,Php,Post,我试图通过Javascript将JSON字符串发送到PHP脚本。不幸的是它是空的。我已经检查了谷歌上的一百个网站,但我找不到解决问题的办法。以下是我正在做的: 我的HTML/Javascript: <head> <script type="text/javascript"> function button1_Click() { var url = 'http://192.168.2.105/testpost.php'; var method
<head>
<script type="text/javascript">
function button1_Click() {
var url = 'http://192.168.2.105/testpost.php';
var method = "POST";
var postData = {
"first": "John",
"last": "Doe"
};
var xhr = new XMLHttpRequest();
xhr.open( 'POST', url );
xhr.setRequestHeader( 'Content-Type', 'application/json' );
xhr.send( JSON.stringify(postData) );
}
</script>
</head>
<body>
<button id="button1" onclick="button1_Click()">Print</button>
</body>
我不知道,为什么这是空的。你能帮忙吗
编辑:感谢埃德加·维莱加斯·阿尔瓦拉德和昆汀
在HTML中,我更改了以下内容:
xhr.setRequestHeader( 'Content-Type', 'text/plain' );
然后在PHP中:
<?php
$json_data = json_decode($HTTP_RAW_POST_DATA);
ob_start();
echo $json_data->first;
file_put_contents('test.txt', ob_get_contents());
ob_end_close();
?>
这就是我需要的 在这种情况下,您必须发送您的参数url编码。因此,与此相反:
xhr.send( JSON.stringify(postData) )
这样做:
xhr.send( "postData=" + encodeURIComponent(JSON.stringify(postData)) );
然后在php中,您可以通过以下方式阅读:
$postData = json_decode($_POST['postData']);
编辑,哦,我看到您以application/json的形式发送。在这种情况下,您发送的邮件是正确的,您应该这样阅读:
$postData = json_decode($HTTP_RAW_POST_DATA);
$HTTP_RAW_POST_数据获取请求的主体,这正是您所需要的。我希望它在您的php环境中可用。如果不是,您可以使用file\u get\u contentsphp://input .
希望这有帮助。干杯您正在发送JSON,但您正在尝试从$\u POST读取,该POST仅由HTML表单支持的数据格式填充。它的可能重复是许多条目的可能重复。但问题是,如果你真的陷入困境,这些条目都帮不了你。副本上的答案准确地告诉你需要做什么。声称您发送的是纯文本是错误的,URL编码JSON没有任何好处,但会迫使您在另一端手动解码。肯定有一个原因,为什么会有这么多重复的内容。如果真的有帮助的话,那就足够了,对吧无论如何,谢谢你关于URL编码/解码的提示。我已经在上面的编辑中删除了它。关于纯文本。。。如果你能说出原因就好了,否则对我和其他人都没有帮助。换句话说:为了使上述情况正确,需要做什么?嗨,埃德加。谢谢你的快速回复。我无法以一种或另一种方式工作。但是你的提示真的提供了我所需要的一切,通过结合这两种解决方案使它工作。
xhr.send( "postData=" + encodeURIComponent(JSON.stringify(postData)) );
$postData = json_decode($_POST['postData']);
$postData = json_decode($HTTP_RAW_POST_DATA);