簡體   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