Не могу заставить работать Sweetalert2 AJAX

У меня проблема с ajax, я пытаюсь научиться этому, но он не хочет меня 🙂

Итак, это мой код:

<script>
$('._givePP').on('click', () => {
swal.mixin({
input: 'text',
confirmButtonText: 'Next &rarr;',
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, он работает.

0

Решение

Ваш 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);
?>
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]