
13.04.2016, 15:03
|
Аспирант
|
|
Регистрация: 26.06.2014
Сообщений: 69
|
|
Обработчик XMLHttpRequest запроса
Есть код JS
var data = {
name: 'Виктор',
surname: 'Цой'
};
var str = JSON.stringify(data);
var xhttp = new XMLHttpRequest();
xhttp.open('POST', 'server.php', true);
xhttp.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
xhttp.onreadystatechange = function() {
if (this.readyState != 4) return;
if (this.status != 200) {
alert( 'ошибка: ' + (this.status ? this.statusText : 'запрос не удался') );
return;
}
}
xhttp.send(str);
Пишу под него обработчик PHP . Задача записывать полученные данные в json файл.
if(isset($_POST['name'])) {
header("Content-type: application/json; charset=UTF-8");
$name = $_POST['name'];
file_put_contents('user.json', $name);
}
Ничего не получается в чем проблема?
|
|

13.04.2016, 15:36
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Sergei-b84
|
Ничего не получается в чем проблема?
|
В том, что клиент такого параметра не передает. str - это всего лишь строка, а не параметр=значение. А вот так xhttp.send(name=str);, $_POST будет содержать ключ name,
|
|

13.04.2016, 16:03
|
Аспирант
|
|
Регистрация: 26.06.2014
Сообщений: 69
|
|
Сделал. Ничего не работает. Даже в файле server.php оставил так:
print_r($_POST); Ничего.
|
|

13.04.2016, 16:17
|
Аспирант
|
|
Регистрация: 26.06.2014
Сообщений: 69
|
|
Упростил еще больше. Все равно не работает. server.php просто print_r($_POST);
<script>
function click() {
var params = "lorem=ipsum&name=binny";
var xhr = new XMLHttpRequest();
xhr.open('POST', '../server.php', true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("Content-length", params.length);
xhr.setRequestHeader("Connection", "close");
xhr.onreadystatechange = function() {
if (this.readyState != 4) return;
if (this.status != 200) {
alert( 'ошибка: ' + (this.status ? this.statusText : 'запрос не удался') );
return;
}
}
xhr.send(params);
}
</script>
<button onclick="click()" id="user" >Клик!</button>
|
|

13.04.2016, 17:05
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Отладчик что говорит? Ну в нем же можно практически все проблемы увидеть.
|
|

13.04.2016, 17:18
|
Аспирант
|
|
Регистрация: 26.06.2014
Сообщений: 69
|
|
 Ничего не говорит. Ошибок нет.
Последний раз редактировалось Sergei-b84, 13.04.2016 в 17:28.
|
|

13.04.2016, 17:30
|
Аспирант
|
|
Регистрация: 26.06.2014
Сообщений: 69
|
|
Видите на скрине данные в ответе есть. Но почему print_r($_POST); их не отображает?
|
|

13.04.2016, 17:44
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Вижу, и запрос есть, и ответ есть, а жалобы на что были - нет отправки?
Сообщение от Sergei-b84
|
Но почему print_r($_POST); их не отображает?
|
То что вы видите в ответе, это и есть работа print_r(), а не отображает на странице, ну так это асинхронный запрос, а вы его совсем не используете (ответ сервера), интересуетесь статусом, а нужен xhr.responseText, в нем и будет результат print_r.
|
|

13.04.2016, 18:04
|
Аспирант
|
|
Регистрация: 26.06.2014
Сообщений: 69
|
|
Сообщение от laimas
|
Вижу, и запрос есть, и ответ есть, а жалобы на что были - нет отправки?
То что вы видите в ответе, это и есть работа print_r(), а не отображает на странице, ну так это асинхронный запрос, а вы его совсем не используете (ответ сервера), интересуетесь статусом, а нужен xhr.responseText, в нем и будет результат print_r.
|
Жалобы были на то, что я не видел его на экране. Подскажите как это сделать. Я PHP плохо знаю.
|
|

13.04.2016, 18:21
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Ну как, так как и сделано:
if($_POST) print_r($_POST);
В отладчике же содержится ответ сервера, вот только его использовать надо - если статус равен 200, то alert(xhr.responseText)
|
|
|
|