#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