У меня проблема с ajax, я пытаюсь научиться этому, но он не хочет меня 🙂
Итак, это мой код:
<script>
$('._givePP').on('click', () => {
swal.mixin({
input: 'text',
confirmButtonText: 'Next →',
showCancelButton: true,
progressSteps: ['1', '2']
}).queue([
{
title: 'Question 1',
text: 'Chaining swal2 modals is easy'
},
{
title: 'Question 2',
text: 'bla bla 2'
}
]).then((result) => {
if (result.value) {
$.ajax({
_dapepe: true,
url: '<?php echo Config::$data->url;?>action/profile',
type: 'POST',
success: (e) => {
e = JSON.parse(e);
swal({
title: e.title,
text: e.message,
type: e.type
});
}
});
}
})
});
</script>
И это код php:
<?php
if(isset($_POST['_dapepe'])) {
return print_r(json_encode(array('title' => 'Success','text' => 'gg','type' =>'success')));
}
?>
Все, что я пытаюсь получить, это простой текст gg, так что я знаю, что он читает файл php, но я не получаю сообщение gg. Кто-нибудь знает, что не так или почему он не читает текст?
Кстати, я проверил URL, он работает.
Ваш ajax-вызов не отправляет данные на сервер, поэтому это строка if(isset($_POST['_dapepe']))
никогда не будет true
, Это, в свою очередь, будет означать, что ваш PHP-код никогда не возвращает никаких данных, и, следовательно, ваш «успешный» код JS потерпит крах, поскольку он попытается получить доступ к данным, которых не существует. Вероятно, у вас есть ошибки или предупреждения в консоли вашего браузера, связанные с этим, хотя вы их не упомянули.
В опциях $ .ajax вместо
_dapepe: true,
тебе нужно написать
data: { _dapepe: true },
Как вы это написали, JQuery не знает, что вы хотели _dapepe
чтобы быть полем данных, он просто видит его как опцию, которую он не распознает, и поэтому игнорирует его. Вы должны положить его внутрь data
вариант, поэтому jQuery знает, что с ним делать.
http://api.jquery.com/jquery.ajax/ документирует все допустимые параметры, которые вы можете предоставить методу $ .ajax ().
Я также рекомендую эти вещи в вашем PHP:
1) return print_r
это ошибка и не сработает. print_r выводит свои данные прямо на вывод, если вы не установите отдельный флаг в качестве второго аргумента для него (см. http://php.net/manual/en/function.print-r.php)
2) Использование echo
вместо print_r
— print_r предназначен для отладки. В зависимости от типа данных, которые вы возвращаете, он может иногда печатать символы, которые на самом деле не являются частью ваших переменных данных (например, https://eval.in/1040578). Это вероятно безопасно в случае json_encode (), но не привыкайте его использовать.
2) было бы лучше, если бы ваш код всегда возвращался что-то, даже если это пустой объект. JavaScript может иногда зависать, если просто нет никаких данных ответа.
Имея это в виду, я бы предложил изменить PHP на:
<?php
$array = array();
if(isset($_POST['_dapepe'])) {
$array = array('title' => 'Success','text' => 'gg','type' =>'success');
}
echo json_encode($array, JSON_FORCE_OBJECT);
?>
Других решений пока нет …