Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.05.2021, 19:09
Аватар для nastya97core
Аспирант
Отправить личное сообщение для nastya97core Посмотреть профиль Найти все сообщения от nastya97core
 
Регистрация: 04.04.2020
Сообщений: 60

Как отправить и получить данные (не formdata) XMLHttpRequest?
Здравствуйте. Если речь идёт о отправке формы, то я всегда использовала вот этот код (он работает, проблем нет):
function send(event, php){
console.log("Отправка запроса");
event.preventDefault ? event.preventDefault() : event.returnValue = false;
var req = new XMLHttpRequest();
req.open('POST', php, true);
req.onload = function() {
  if (req.status >= 200 && req.status < 400) {
  json = JSON.parse(this.response);
    	console.log(json);
        
    	// ЗДЕСЬ УКАЗЫВАЕМ ДЕЙСТВИЯ В СЛУЧАЕ УСПЕХА ИЛИ НЕУДАЧИ
    	if (json.result == "success") {
    		// Если сообщение отправлено
    		alert("Сообщение отправлено");
    	} else {
    		// Если произошла ошибка
    		alert("Ошибка. Сообщение не отправлено");
    	}
    // Если не удалось связаться с php файлом
    } else {alert("Ошибка сервера. Номер: "+req.status);}}; 

// Если не удалось отправить запрос. Стоит блок на хостинге
req.onerror = function() {alert("Ошибка отправки запроса");};
req.send(new FormData(event.target));
}

Теперь мне нужно отправить не форму, а передать данные первым аргументом. Я попыталась сделать вот так:
<div onclick="sendtoCart('malako','tocart.php')">В КОРЗИНУ</div>

// ajax
function sendtoCart(event, php){
var req = new XMLHttpRequest();
req.open('POST', php, true);
req.onload = function() {
  if (req.status >= 200 && req.status < 400) {
  json = this.response;
    console.log("json",json);
        
    // Если не удалось связаться с php файлом
    } else {alert("Ошибка сервера. Номер: "+req.status);}}; 

// Если не удалось отправить запрос. Стоит блок на хостинге
req.onerror = function() {alert("Ошибка отправки запроса");};
req.send(event);
}

А на сервере:
<?php 
echo json_encode($_POST);
?>


Но консоль передаёт мне вот такое: json []

Что я делаю не так?
Ответить с цитированием
  #2 (permalink)  
Старый 13.05.2021, 19:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

nastya97core,
а так?

req.send('name=' +event);
Ответить с цитированием
  #3 (permalink)  
Старый 13.05.2021, 19:24
Аватар для nastya97core
Аспирант
Отправить личное сообщение для nastya97core Посмотреть профиль Найти все сообщения от nastya97core
 
Регистрация: 04.04.2020
Сообщений: 60

рони,
также
json []

и так пусто:
req.send('123');

И непонятно: то ли не отправляю, то ли не получаю

Последний раз редактировалось nastya97core, 13.05.2021 в 19:28.
Ответить с цитированием
  #4 (permalink)  
Старый 13.05.2021, 19:30
Аватар для nastya97core
Аспирант
Отправить личное сообщение для nastya97core Посмотреть профиль Найти все сообщения от nastya97core
 
Регистрация: 04.04.2020
Сообщений: 60

если в php написать echo "123"; вместо POST, то в консоли получу 123
Ответить с цитированием
  #5 (permalink)  
Старый 13.05.2021, 20:21
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,672

nastya97core,
Надо кодировку указать (почитай что такое $_POST):
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
Ответить с цитированием
  #6 (permalink)  
Старый 13.05.2021, 20:36
Аватар для nastya97core
Аспирант
Отправить личное сообщение для nastya97core Посмотреть профиль Найти все сообщения от nastya97core
 
Регистрация: 04.04.2020
Сообщений: 60

Rise,
вооооооот. где вы были раньше?)

Только что узнала, что нужно было указать заголовки. Указала - всё сработало. Но теперь немного локальная проблема:
к примеру, я хочу отправить json. Делаю всё, как указано здесь:
https://learn.javascript.ru/xhr-forms#drugie-kodirovki

Тупо скопировала и вставила весь кусок кода, изменив только адрес php файла и добавив обработку ответа:
xhr.onload = function() {
console.log(this.response);
}


И опять тоже самое! Нету результата, опять пустой ответ []

PHP не может обработать json или что? Нужно каким-то определённым образом обрабатывать json?


upd. да, нужно определённым образом обрабатывать json. на сервере это выглядит вот так:
$postData = file_get_contents('php://input');
echo $postData;
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить связанные данные из модели? Infarch ExtJS 1 24.10.2014 16:40
Как получить данные формы Moonlight Angular.js 0 24.10.2014 11:12
Как получить данные переданные методом POST? layla Общие вопросы Javascript 3 13.12.2010 10:16
Отправить данные с контейнера (XMLHttpRequest) vladikas Библиотеки/Тулкиты/Фреймворки 7 26.11.2010 17:47
как получить данные из reader.xmlData lfs2008 ExtJS 3 02.11.2010 19:12