Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.04.2016, 15:03
Аспирант
Отправить личное сообщение для Sergei-b84 Посмотреть профиль Найти все сообщения от Sergei-b84
 
Регистрация: 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);
}


Ничего не получается в чем проблема?
Ответить с цитированием
  #2 (permalink)  
Старый 13.04.2016, 15:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Sergei-b84
Ничего не получается в чем проблема?
В том, что клиент такого параметра не передает. str - это всего лишь строка, а не параметр=значение. А вот так xhttp.send(name=str);, $_POST будет содержать ключ name,
Ответить с цитированием
  #3 (permalink)  
Старый 13.04.2016, 16:03
Аспирант
Отправить личное сообщение для Sergei-b84 Посмотреть профиль Найти все сообщения от Sergei-b84
 
Регистрация: 26.06.2014
Сообщений: 69

Сделал. Ничего не работает. Даже в файле server.php оставил так:
print_r($_POST); Ничего.
Ответить с цитированием
  #4 (permalink)  
Старый 13.04.2016, 16:17
Аспирант
Отправить личное сообщение для Sergei-b84 Посмотреть профиль Найти все сообщения от Sergei-b84
 
Регистрация: 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>
Ответить с цитированием
  #5 (permalink)  
Старый 13.04.2016, 17:05
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Отладчик что говорит? Ну в нем же можно практически все проблемы увидеть.
Ответить с цитированием
  #6 (permalink)  
Старый 13.04.2016, 17:18
Аспирант
Отправить личное сообщение для Sergei-b84 Посмотреть профиль Найти все сообщения от Sergei-b84
 
Регистрация: 26.06.2014
Сообщений: 69

Ничего не говорит. Ошибок нет.

Последний раз редактировалось Sergei-b84, 13.04.2016 в 17:28.
Ответить с цитированием
  #7 (permalink)  
Старый 13.04.2016, 17:30
Аспирант
Отправить личное сообщение для Sergei-b84 Посмотреть профиль Найти все сообщения от Sergei-b84
 
Регистрация: 26.06.2014
Сообщений: 69

Видите на скрине данные в ответе есть. Но почему print_r($_POST); их не отображает?
Ответить с цитированием
  #8 (permalink)  
Старый 13.04.2016, 17:44
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Вижу, и запрос есть, и ответ есть, а жалобы на что были - нет отправки?

Сообщение от Sergei-b84
Но почему print_r($_POST); их не отображает?
То что вы видите в ответе, это и есть работа print_r(), а не отображает на странице, ну так это асинхронный запрос, а вы его совсем не используете (ответ сервера), интересуетесь статусом, а нужен xhr.responseText, в нем и будет результат print_r.
Ответить с цитированием
  #9 (permalink)  
Старый 13.04.2016, 18:04
Аспирант
Отправить личное сообщение для Sergei-b84 Посмотреть профиль Найти все сообщения от Sergei-b84
 
Регистрация: 26.06.2014
Сообщений: 69

Сообщение от laimas Посмотреть сообщение
Вижу, и запрос есть, и ответ есть, а жалобы на что были - нет отправки?



То что вы видите в ответе, это и есть работа print_r(), а не отображает на странице, ну так это асинхронный запрос, а вы его совсем не используете (ответ сервера), интересуетесь статусом, а нужен xhr.responseText, в нем и будет результат print_r.
Жалобы были на то, что я не видел его на экране. Подскажите как это сделать. Я PHP плохо знаю.
Ответить с цитированием
  #10 (permalink)  
Старый 13.04.2016, 18:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Ну как, так как и сделано:

if($_POST) print_r($_POST);


В отладчике же содержится ответ сервера, вот только его использовать надо - если статус равен 200, то alert(xhr.responseText)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нахождение места отправки XMLHttpRequest запроса, по ответу сервера Green Elephant AJAX и COMET 3 11.05.2015 00:18
XMLHttpRequest передача массива серверу JaneLane AJAX и COMET 5 16.05.2014 12:09
запрос на другой сайт XMLHttpRequest vscorpion Internet Explorer 9 24.12.2013 16:46
Как заставить выполняться обработчик после всех имеющихся обработчиков данного элемен Анатолий Саратовцев jQuery 2 08.10.2012 18:49
Как "обмануть" обработчик события? itPiligrim Events/DOM/Window 0 13.05.2010 22:55