如何捕获与ajax发送的php上的json数据(无jquery)

时间:2019-02-03 15:35:30

标签: javascript php json ajax

我正在使用ajax和纯JavaScript将json数据发送到服务器。如何获得Printed索引,该索引将在php页面上显示json内容?

ajax将$_POST的请求发送到服务器,与此同时,通过使用内容类型'application / json',我在下面的链接中得到了一个示例,因为json数据(stringfy)是直接通过否key=value

Sending a JSON to server and retrieving a JSON in return, without JQuery

在php方面,用于发布请求,下面给出了示例。

key=value

现在我不明白$v = json_decode(stripslashes(file_get_contents("php://input"))) 在这里表示什么,因为json数据已发送到同一页面。我尝试了php://input,但未返回任何内容。 我尝试使用file_get_contents('https://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']);将所有内容查看为数组,但是我得到的只是var_dump($_POST)。 那么,我如何真正捕获发送到php页面的ajax(json)请求? 这是代码示例:

array(0){}

PHP

var data = {
    name : "john",
    Friend : "Jonny",
    Bestie : "johnson",
    neighbour: "john doe"
};
json = JSON.stringify(data);
    var ajax = new XMLHttpRequest(), url = '../handler.php';
    ajax.onreadystatechange = function() {
        if(this.readyState == 4 && this.status == 200) {
            console.log(this.responseText);
        };
    };
    ajax.open('POST', url, true);
    ajax.setRequestHeader('content-type', 'application/json');
    ajax.send(json);

我希望json字符串存在于$ _POST变量中,并且可以在解码json字符串后通过其索引进行访问,但是我得到header("Content-Type: application/json"); var_dump($_POST); file_get_contents('https://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']); array(0){}或什么都没显示

1 个答案:

答案 0 :(得分:0)

要获取数组,请将true参数添加到json_decode()。 在您的代码中:

$body = json_decode(file_get_contents("php://input"), true);
var_export($body);

要在$ _POST中添加JSON数据,可以使用此代码。

在JS中:

json = JSON.stringify(data);
var ajax = new XMLHttpRequest(), url = '../handler.php';
ajax.onreadystatechange = function() {
  if(this.readyState == 4 && this.status == 200) {
    console.log(this.responseText);
  };
};
ajax.open('POST', url, true);
ajax.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
ajax.send('jsn='+json);

在PHP中:

$arr = isset($_POST['jsn']) ? json_decode($_POST['jsn'], true) :[];
var_export($arr);

来源:https://coursesweb.net/ajax/json-from-javascript-php