Когда я вызываю Ajax в основной части кода Jquery, он возвращает правильный результат, но когда я вызываю его изнутри функции, он терпит неудачу. Вот код на стороне сервера:
<?php
$what = $_POST["what"];
$where = $_POST["where"];
if(isset($what)){
$data = array(
"what" => $what,
"where" => $where,
);
echo json_encode($data);
}
?>
Вероятно, причина того, что вы не видите текст в браузере, заключается в том, что вы отправляете форму и не блокируете действие по умолчанию при отправке формы. Это приведет к отправке вызова ajax, но затем страница немедленно перезагрузится, и результат вызова ajax не будет отображен.
Чтобы это исправить, вы бы позвонили e.preventDefault()
в вашем обработчике событий.
function get_click(e) {
e.preventDefault();
$.ajax({
url: "test.php",
type: "POST",
data: {what : what, where : where},
dataType: "json",
success: function (data) {
$("#result1").text(JSON.stringify(data));
},
error: function (error) {
alert("ajax error " + JSON.stringify(error));
}
});
}
И добавьте параметр события в ваш HTML:
<form onsubmit="get_click(event)">
<input type="submit">
</form>
Рабочая демонстрация: https://jsfiddle.net/jfriend00/841v9rpf/. Если вы удалите e.preventDefault()
из демо, то форма отправляет.
Других решений пока нет …