繁体   English   中英

从Javascript到PHP的JSON POST

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM