Как записать данные json на php, отправленные с помощью ajax (без jquery) - PullRequest
0 голосов
/ 03 февраля 2019

Я отправляю данные json на сервер, используя ajax и чистый javascript.Как получить индекс $_POST, который будет отображать содержимое json на странице php?

ajax отправляет запрос как key=value на сервер, тем временем, используя тип контента 'application / json', я получил пример по ссылке ниже, поскольку данные json (stringfy) были отправлены напрямуюбез key=value.

Отправка JSON на сервер и получение JSON в ответ, без JQuery

На стороне php для пост-запроса, приведенный ниже пример былдано.

$v = json_decode(stripslashes(file_get_contents("php://input")))

Теперь я не понимаю, что здесь означает php://input, поскольку данные json были отправлены на ту же страницу.Я попытался file_get_contents('https://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']);, но ничего не вернулось.Я попытался использовать var_dump($_POST) для просмотра всего содержимого в виде массива, но все, что я получил, это array(0){}.Так как же мне на самом деле перехватить запрос ajax (json), который я отправил на страницу 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);

PHP

header("Content-Type: application/json");
var_dump($_POST); 
file_get_contents('https://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']); 

Я ожидал, что строка json будет присутствовать в переменной $ _POST и будет доступна по индексу после декодирования строки json, но я получаю array(0){}, null или вообще ничего не отображается

1 Ответ

0 голосов
/ 03 февраля 2019

Чтобы получить массив, добавьте аргумент true к json_decode().В вашем коде:

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

Чтобы добавить данные JSON в $ _POST, вы можете использовать этот код.

В 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...