无法使Sweetalert2 Ajax工作

时间:2018-07-23 12:25:41

标签: php ajax sweetalert2

我对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消息。有人知道是什么问题还是为什么它不读取文本?< / p>

顺便说一句,我验证了网址是否正常工作。

1 个答案:

答案 0 :(得分:2)

您的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)最好让您的代码始终返回 something ,即使它是一个空对象。如果根本没有响应数据,JavaScript有时可能会崩溃。

考虑到这一点,我建议将PHP更改为:

<?php 
$array = array();

if(isset($_POST['_dapepe'])) {
    $array = array('title' => 'Success','text' => 'gg','type' =>'success');
}

echo json_encode($array, JSON_FORCE_OBJECT);
?>