在ajax调用后处理php错误

时间:2017-10-21 12:30:06

标签: javascript php jquery ajax

我在使用Ajax调用的php脚本中获取错误时遇到了一些麻烦。 我有一个指向抑制脚本的ajax 这是我的Js:

$('.js-delete-link').click(function (e) {
    e.preventDefault();
    let id = $(this).closest('tr').find('.id').text();
    if (confirm('Voulez-vous vraiment supprimer le message ?')) {
        let href = $(e.currentTarget).attr('href');
        $.ajax({
            url:href,
            type:'post',
            success:function(data){
                let msgJson = JSON.parse(data);                  
                bootstrapNotify(msgJson.msg,msgJson.type);
            },
        })
    }
});

这是我的PHP脚本,我实际上是在删除这些项目。

if ($_SERVER['REQUEST_METHOD'] === 'POST') {

if (isset($_GET['id'])) {

    $id = FILTER_INPUT(INPUT_GET, 'id', FILTER_VALIDATE_INT);
    if ($id === false) {
        $arr = array("msg" => "Id incorrect ou non spécifié", "type" => 'danger');
    } else {
        if ($messageModelDb->delete($id)) {
            $arr = array("msg" => "Le ou les messages ont été supprimés", "type" => 'success');
        } else {
            $arr = array("msg" => "Le message n'existe pas !", "type" => 'danger');
        }
    }
}

echo json_encode($arr);

} else {
    $_SESSION['error'] = "Vous n'êtes pas autorisé.";
    redirect('liste-messages');
}

在我的php中,我尝试捕获查询期间可能发生的任何错误,如果发生,我会根据错误传递消息。
但是,即使id不存在,无论我总是得到成功的消息 对不起,如果这看起来很明显,但我对这一切都是新手,我有点被困在这里! 谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

如果isset($ _ GET ['id'])为false,则不会发生任何事情,因为你应该像这样放上else语句:

<?php

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_GET['id'])) {

        $id = FILTER_INPUT(INPUT_GET, 'id', FILTER_VALIDATE_INT);
        if (!$id) {
            $arr = array("msg" => "Id incorrect ou non spécifié", "type" => 'danger');
        } else {
            if ($messageModelDb->delete($id)) {
                $arr = array("msg" => "Le ou les messages ont été supprimés", "type" => 'success');
            } else {
                $arr = array("msg" => "Le message n'existe pas !", "type" => 'danger');
            }
        }
    } else {
        $arr = array("msg" => "ID is not set", "type" => 'danger');
    }
} else {
    $arr = array("msg" => "Invalid request method", "type" => 'danger');
}

echo json_encode($arr);

然后在Javascript文件中,您可以添加错误回调:

success: function(){  
    ... 
},
error: function(XMLHttpRequest, textStatus, errorThrown) { 
    alert("Status: " + textStatus + " - Error: " + errorThrown); 
} 

答案 1 :(得分:0)

AFAIK,FILTER_INPUT也可以返回NULL,因此在这种情况下$id === false将为false。如果您确定$ id不能为0,请尝试使用if(!$id)