Чтобы это работало и IMO, «лучший» способ сделать это - использовать два разных файла.
- Один файл (index.html / index.php), из которого вы делаете запрос Ajax, и
- один файл (например, backend.php), куда ответ отправляется обратно
Причина , по которой он не будет работать с одним файлом , заключается в том, что PHP запускается до того, как будет сделан запрос (когда отображается файл index.something).
Поскольку вы ожидаете немедленной обратной связи с запросом Ajax, вам нужна функция успеха, которая делает что-то с данными, возвращаемыми из backend.php.
Поток подобен:
- index.html делает запрос к backend.php и ожидает ответа
- ответы бэкэнда
- index.html получает ответ backend.php в функции успеха
Пример:
index.html (первый файл)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Hello World</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="main.js"></script>
<script>
function $ajaxReq() {
$.ajax({
method: "POST",
url: "backend.php",
data: {
name: "John",
age: 23
},
success: function(data) {
alert(data)
}
})
}
</script>
</head>
<body>
<button onclick="$ajaxReq()">Click me</button>
</body>
</html>
backend.php (второй файл)
<?php
$name = $_POST["name"];
$age = $_POST["age"];
echo "Hello, my name is " . $name . " and I am " . $age . " years old.";
?>