
14.12.2020, 10:29
|
Интересующийся
|
|
Регистрация: 22.05.2013
Сообщений: 16
|
|
ajax без jquery
Нужно написать асинхронный запрос в пхп без использования jquery
пишу
let xhr = new XMLHttpRequest();
let json = JSON.stringify({
name: "Вася",
surname: "Петров"
});
obje ={};
obje = {
"name" : "name",
"phone" : "phone",
};
xhr.open("POST", 'https://nirax-cargo.ru/amocrm/index.php')
xhr.send( obje);
в пхп приходит пустой массив, если отправляю объект или в формате джсон тоже самое, в чём ошибка? как отправить массив в пхп?
|
|

14.12.2020, 10:35
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,145
|
|
|
|

14.12.2020, 10:57
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от grafillo
|
JSON.stringify
в пхп приходит пустой массив
|
Нужно обрабатывать ввод на сервере или отдавать эту строку под ключом, тогда и массив пуст не будет.
|
|

14.12.2020, 12:28
|
Интересующийся
|
|
Регистрация: 22.05.2013
Сообщений: 16
|
|
как это будет выглядеть в виде кода?
|
|

14.12.2020, 12:56
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
grafillo,
это к кому вопрос? Если о вводе, то читать о php://input. В руководстве же и примеры ищите.
Либо передавайте json строку под ключом, например "mykey=" + JSON.stringify(...) и декодируйте ее на сервере как значение $_POST['mykey'].
|
|

14.12.2020, 17:44
|
Интересующийся
|
|
Регистрация: 22.05.2013
Сообщений: 16
|
|
Сообщение от laimas
|
grafillo,
это к кому вопрос? Если о вводе, то читать о php://input. В руководстве же и примеры ищите.
Либо передавайте json строку под ключом, например "mykey=" + JSON.stringify(...) и декодируйте ее на сервере как значение $_POST['mykey'].
|
я на сервере вот так ловлю, приходит пустой массив
$req = print_r($_POST, true);
file_put_contents('visitors.txt', $req);
|
|

14.12.2020, 17:53
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от grafillo
|
я на сервере вот так ловлю
|
Ловить нечего, если не делать так как написано выше.
|
|

14.12.2020, 18:27
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
grafillo, уясните простое - РНР принимает POST данные как пары ключ=>значение и если таковых не обнаружит, то вернет пустой массив $_POST. Это и происходит когда вы отдаете на сервер просто строку - json. В этом случае нужно обрабатывать сырые данные, то что пришло, самостоятельно, как по ссылке.
Но если json строку передавать как значение ключа, то ее можно получить из $_POST.
Если же нужно отправить объект, то его нужно серелизовать, можно так:
var data = {
name: "Вася",
surname: "Петров"
};
//а это для отправки
var send_data = Object.entries(data).map( m => m.join('=')).join('&'); //name=Вася&surname=Петров
xhr.send(send_data);
Вот теперь массив $_POST будет заполнен.
|
|

15.12.2020, 10:15
|
Интересующийся
|
|
Регистрация: 22.05.2013
Сообщений: 16
|
|
Сообщение от laimas
|
grafillo, уясните простое - РНР принимает POST данные как пары ключ=>значение и если таковых не обнаружит, то вернет пустой массив $_POST. Это и происходит когда вы отдаете на сервер просто строку - json. В этом случае нужно обрабатывать сырые данные, то что пришло, самостоятельно, как по ссылке.
Но если json строку передавать как значение ключа, то ее можно получить из $_POST.
Если же нужно отправить объект, то его нужно серелизовать, можно так:
var data = {
name: "Вася",
surname: "Петров"
};
//а это для отправки
var send_data = Object.entries(data).map( m => m.join('=')).join('&'); //name=Вася&surname=Петров
xhr.send(send_data);
Вот теперь массив $_POST будет заполнен.
|
вот мой код и он не сработал, мож в пхп чтото не так?
let xhr = new XMLHttpRequest();
obje ={};
obje = {
name : "name",
phone : "phone",
};
xhr.open("POST", 'https://nir-cago.ru/amocrm/nirxamo.php')
var send_data = Object.entries(obje).map( m => m.join('=')).join('&');
xhr.send(send_data);
|
|

15.12.2020, 14:18
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
<?
if($_POST) exit(print_r($_POST, 1));
?>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
function send() {
var data = {
name: "Вася",
surname: "Петров"
},
send_data = Object.entries(data).map(m => m.join('=')).join('&'),
xhr = new XMLHttpRequest();
xhr.open("POST", location);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onload = function() {
if (xhr.status == 200) {
alert(xhr.responseText)
}
}
xhr.send(send_data);
}
</script>
</head>
<body>
<button onclick="send()">Send</button>
</body>
</html>
Сохранить под любым именем и выполнить. Работает?
|
|
|
|