Не удается отправить данные в вызове AJAX с помощью метода post

#javascript #php

#javascript #php

Вопрос:

вот мой код, он довольно прост и работает идеально:

 var r = new XMLHttpRequest();
var name='KillerSeba';
r.open("GET","../Serve/servepage.php?name=" name,true);
r.onreadystatechange = function () {
  if (r.readyState != 4 || r.status != 200) return;
  alert("Success: "   r.responseText);
};
r.send();
  

Этот код просто отправляет предупреждение «Success: KillerSeba» при загрузке страницы. И мой php-файл, который отвечает на запрос, выглядит как:

 <?php
$s=$_REQUEST['name'];
echo $s;
?>
  

Тогда я хочу использовать метод POST вместо GET. Чтобы сделать это, я меняю «GET» на «POST», меняю URL на php-файл, затем добавляю переменную name в функцию send (), поэтому мой код javascript выглядит следующим образом:

 var r = new XMLHttpRequest();
var name='KillerSeba';
r.open("POST","../Serve/servepage.php",true);
r.onreadystatechange = function () {
  if (r.readyState != 4 || r.status != 200) return;
  alert("Success: "   r.responseText);
};
r.send(name);
  

Но теперь скрипт не отправляет никаких данных в файл php, потому что я получаю только предупреждение «Success:». KillerSeba куда-то исчезает. Я попытался использовать ‘name’ и «name» вместо name внутри функции send (), я попытался заменить $_REQUEST на $ _POST, но это все равно не помогает. Итак, мой вопрос: как отправить данные в AJAX-запросе с использованием метода POST? Как работает эта функция send()?
PS Я предпочитаю использовать только ванильный фреймворк JS.

Ответ №1:

Поскольку вы отправляете имя в виде строки без какого-либо имени параметра, именно поэтому он не работает для вас с POST методом, но когда вы отправляете с GET помощью, вы объединяете это имя с URL. Теперь вам нужно передать параметры так же, как вы отправили с помощью метода GET. Просто попробуйте так, я просто переношу имя в вызываемую переменную params , которая содержит params = 'name=' name; , поэтому вы должны отправить ее своим r.send(params) . Смотрите Примеры здесь как для GET, так и для POST

 var r = new XMLHttpRequest();
var name='KillerSeba';
r.open("POST","../Serve/servepage.php",true);
//Send the proper header information along with the request
r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
r.onreadystatechange = function () {
  if (r.readyState != 4 || r.status != 200) return;
  alert("Success: "   r.responseText);
};
params = 'name=' name;
r.send(params);
  

Комментарии:

1. Большое спасибо, теперь он работает правильно, но только с тех пор, как я добавил r.setRequestHeader(«Content-Type», «application / x-www-form-urlencoded»); в код. Заголовок тоже должен был быть отправлен; он не работает без него

2. Да, вы должны добавить этот Content-Type заголовок, я просто пропустил, чтобы добавить его в свой ответ

Ответ №2:

Вы отправляете name , но без какого-либо имени переменной (оно рассматривается как имя переменной без какого-либо значения).

Измените свой r.send(name); на r.send('name=' name); .

Для получения дополнительной информации ознакомьтесь с веб-документами MDN

РЕДАКТИРОВАТЬ: Спасибо за подсказку, конечно, вам нужно установить правильный заголовок перед отправкой запроса:

 r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  

Комментарии:

1. Спасибо за документацию, я прочитал, что заголовок необходимо отправлять при использовании метода POST. И значения переменных, ofc