[英]JSON POST from Javascript to PHP
我正在尝试通过Javascript将JSON字符串发送到PHP脚本。 不幸的是它是空的。 我已经在Google和SO上检查了一百个站点,但是找不到解决该问题的方法。 这是我在做什么:
我的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>
而我的PHP:
<?php
ob_start();
var_dump($_REQUEST);
file_put_contents('test.txt', ob_get_contents());
ob_end_close();
?>
这就是我在test.txt中得到的:
array(0) {
}
我不知道为什么这是空的。 你能帮忙吗?
编辑:感谢埃德加·维尔加斯·阿尔瓦拉德和昆汀
在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();
?>
最后我进入test.txt:
John
那就是我所需要的。
在这种情况下,您必须发送经过网址编码的params。 所以代替这个:
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_DATA
获取请求的主体,正是您所需要的。 我希望它在您的php env中可用。 如果不是,则可以使用file_get_contents("php://input")
( info )。
希望这可以帮助。 干杯
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.