Как в php получить строку отправленную на сервер посредством ajax
Встал вопрос получения данных в 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);
}
}
Понимаю что вопросы достаточно банальные, но я не понимаю как это работает и где взять информацию по такого рода взаимодействию.
Получаю такой ответ
Ответы (2 шт):
Отправляйте строку методом 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;
Добавлю второй вариант, при котором данные будут в $_POST или $_GET:
- Нужно добавить заголовок (перед xhr.send())
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
- Нужно написать кастомный сериализатор данных т.к. данные нужно передавать в формате 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));
