ajax调用后处理php错误

ajax调用后处理php错误

问题描述:

我在使用Ajax调用php脚本时遇到了一些问题。 我有一个指向压制脚本的ajax。
这里是我的JS:ajax调用后处理php错误

$('.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不存在。
对不起,如果这看起来完全明显,但我是新来的,我有点卡在这里!
谢谢你的帮助!

+0

服务器端重定向,而做一个Ajax调用 – charlietfl

+0

不会重定向浏览器页面谢谢你,我并没有意识到, – Simondebn

如果isset($ _ GET [“身份证”])是假的,什么都不会发生,因为你应该把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); 
} 
+0

确定这做到了,但后来我我们必须处理ajax回调中的错误吗?不是在PHP脚本? – Simondebn

+0

你说得对,我已经编辑了我的anwser。 –

+0

好的非常感谢你!还有一件事,当我尝试在我的链接中输入一个错误的ID时,我仍然可以得到一个答案,就好像该项目存在一样,我不明白为什么? – Simondebn

据我所知,在FILTER_INPUT可能返回NULL太多,所以$id === false会在这种情况下错误的。尝试使用if(!$id)相反,如果你确定你的$ id不能为0

+0

谢谢你! – Simondebn

+0

如果$ id = NULL,它仍然是false:http://php.net/manual/en/types.comparisons.php。我认为最好是这样做if!(!isset($ id)&& $ id!==“”) –

+0

@jeroene wait ...'if(!$ id)'在两种情况下都是true,当$ id是null,当$ id为false时,我们可以使用它来测试$ id,否? – AlexandrX