Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.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到PHP的JSON POST_Javascript_Php_Post - Fatal编程技术网

从Javascript到PHP的JSON POST

从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

我试图通过Javascript将JSON字符串发送到PHP脚本。不幸的是它是空的。我已经检查了谷歌上的一百个网站,但我找不到解决问题的办法。以下是我正在做的:

我的HTML/Javascript:

<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);