Как в php получить строку отправленную на сервер посредством ajax

Рейтинг: 0Ответов: 2Опубликовано: 25.02.2023

Встал вопрос получения данных в php посредством ajax на стороне сервера без использования форм. Маршрутизация работает.

index.php

case 'getEntries';
    echo var_dump($_POST);
    break;

start.js

function some_function() {
    let obj = {id: 'hello5555'};
    xhr = new XMLHttpRequest();
    xhr.open('POST', '/getEntries');
    xhr.send(obj);
    xhr.onload = function() {
        alert(xhr.responseText);
    }
}

start.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <button onclick="some_function();">Кнопка</button>
        <script src="start.js"></script>
    </body>
</html>

Как я могу получить значение id в php?

Также как я могу получить в php просто строку из примера ниже

function some_function() {
    let obj = 'hello';
    xhr = new XMLHttpRequest();
    xhr.open('POST', '/getEntries');
    xhr.send(obj);
    xhr.onload = function() {
        alert(xhr.responseText);
    }
}

Понимаю что вопросы достаточно банальные, но я не понимаю как это работает и где взять информацию по такого рода взаимодействию.

Получаю такой ответ

введите сюда описание изображения

Ответы

▲ 1Принят

Отправляйте строку методом POST и читайте из потока php://input:

print file_get_contents('php://input');

Если хотите отправить объект, то преобразовывайте в JSON:

xhr.send(JSON.stringify(obj));

Затем декодируйте полученный JSON с помощью json_decode:

$obj = json_decode(file_get_contents('php://input'));
print $obj->id;
▲ 1

Добавлю второй вариант, при котором данные будут в $_POST или $_GET:

  1. Нужно добавить заголовок (перед xhr.send())
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  1. Нужно написать кастомный сериализатор данных т.к. данные нужно передавать в формате query string ('query=string&...'):
function serialize(obj, prefix) {
  let str = [], p;
  for (p in obj) {
    if (obj.hasOwnProperty(p)) {
      var k = prefix ? prefix + "[" + p + "]" : p,
        v = obj[p];
      str.push((v !== null && typeof v === "object") ?
        serialize(v, k) :
        encodeURIComponent(k) + "=" + encodeURIComponent(v));
    }
  }
  return str.join("&");
}

и уже используя его передаем данные

xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send(serialize(obj));