GET-запрос работает:
var xhr = new XMLHttpRequest;
xhr.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
document.querySelector('.response').innerHTML = this.responseText;
}
}
xhr.open("GET", "search.php?q="+val, true);
xhr.send();
PHP (GET):
header("Content-type: text/plain; charset=windows-1251");
if(ISSET($_GET)) {
$val = $_GET['q'];
echo $val;
} else {
echo 'Not GET variables';
}
POST:
var xhr = new XMLHttpRequest;
xhr.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
document.querySelector('.response').innerHTML = this.responseText;
}
}
xhr.open("POST", "search.php", true);
xhr.send(val);
PHP:
header("Content-type: text/plain; charset=windows-1251");
if(ISSET($_POST)) {
$val = $_POST['val'];
echo $val;
} else {
echo 'Not POST variables';
}
JS полный:
var val;
var inp = document.querySelector("#query-input");
inp.onkeyup = function () {
val = inp.value;
if (val.length != 0) {
var xhr = new XMLHttpRequest;
xhr.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
document.querySelector('.response').innerHTML = this.responseText;
}
}
xhr.open("POST", "search.php", true);
xhr.send(val);
}
}
Не работает POST-запрос. Нет вовсе никакого ответа. Т.е. запрос-то есть, но сервер не отвечает, хотя переменная val определена. Как правильно сделать запрос?
Первое. Используйте empty() вместо isset(). isset() проверяет существование переменной (переменные $_GET и $_POST существуют всегда), а empty() - существует ли переменная и пуста ли она (там много нюансов, уточните их в документации). У вас в PHP-коде конструкция else никогда не сработает.
Второе. В вашем примере с POST-запросом на JavaScript переменная val содержит в себе строку в неправильном формате. Чтобы PHP смог воспользоваться ею, эта переменная должна быть строкой, имеющей формат foo=bar (foo - имя поля POST-запроса, bar - значение поля). То есть в вашем случае переменная val должна быть строкой val=example, чтобы к ней можно было обратиться в PHP как к $_POST['val']. То есть четвертую строку последнего вашего блока кода надо заменить на это:
val = 'val=' + encodeURIComponent(inp.value);
Советую вам ознакомиться со статьёй про XHR, где подробно объясняется этот момент.
Третье. В PHP используйте функции в нижнем регистре. Не ISSET(), а isset().
Четвертое. Включите отображение ошибок в PHP. Пропишите это в начале самого первого вызываемого файла:
error_reporting(E_ALL);
ini_set('display_errors', 1);
Из-за того, что у вас PHP не мог найти переменную $_POST['val'], он отбрасывал ошибку и прекращал работу, из-за чего ваш скрипт не выводил вам никакой текст.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей