我对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消息。有人知道是什么问题还是为什么它不读取文本?< / p>
顺便说一句,我验证了网址是否正常工作。
答案 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);
?>