2015-09-15 92 views
1

sweetalert我有这样的Ajax代码来处理PHP文件返回错误从PHP

$.ajax({ 
    url:'vals/Package.php', 
    data:$(this).serialize(), 
    type:'POST', 
    success:function(data){ 
    console.log(data); 
    swal("Success", "We will contact you soon! Thank you :)", "success"); 
    }, 
    error:function(data){ 
    swal("Sorry", "Failed to send order. Please try later :(", "error"); 
    } 
}); 

在我Package.php

$Query = mysqli_query($connecDB,"insert into query here"); 
if($Query){ 
    echo 'success message'; 
} 
else{ 
    echo 'error here'; 
} 

如果插入数据库中的错误,我怎么能发送它sweetalert?

如果我删除if else条件,它显示成功消息。我也试图显示错误消息。

+0

我通常从我的PHP返回一个JSON字符串中包含'msg'或'err'状态消息和有时'success'布尔键。然后,我可以在json返回中查找适当的键,如果设置了,alert(result.msg)'...等等。 –

回答

1

您现在只是回显一个错误字符串,但该响应仍将与状态200头一起发送。你需要做的是明确设置标题:

header('HTTP/1.1 500 Internal Server Error'); 
echo 'error message'; 

我觉得我说得对jQuery的只是对于所有的非HTTP 200个响应为错误(即不成功的请求)。这可能会有一些例外情况,如404,301或201状态码。无论哪种方式,如果你想指出一个严重的问题:使用http 500(内部服务器错误)

1

最好的解决办法是使用try/catch并发送两种消息作为响应,以下是使用自己的代码剪断:

在你package.php

try { 
    $Query = mysqli_query($connecDB, "insert into query here"); 
    if ($Query) { 
     echo 'success message'; 
    } else { 
     throw new Exception('dummy error message'); 
    } 
} catch (Exception $exc) { 
    //handle any errors in your code, including connection issues 
    echo 'error'; //this will be your "flag" to handle on the client side 
    //and if you want, can also log the error with 
    //$exc->getMessage() or $exc->getTraceAsString() 
    die; 
} 

在JS文件:

$.ajax({ 
    url: 'vals/Package.php', 
    data: $(this).serialize(), 
    type: 'POST', 
    success: function (data) { 
     if (data !== 'error') { 
      swal("Success", "We will contact you soon! Thank you :)", "success"); 
     } else { 
      //our handled error 
      swal("Sorry", "Failed to send order. Please try later :(", "error"); 
     } 
    }, 
    error: function (data) { 
      //other errors that we didn't handle 
     swal("Sorry", "Failed to send order. Please try later :(", "error"); 
    } 
}); 

随着使用try/catch你的代码防止意外错误的防弹。 注意:当然,您可以编辑标题而不是回显自己的标志,并返回将在您的ajax错误函数中处理的http错误。

1

我发现这个代码,似乎工作

if($Query){ 

} 
else{ 
    header('HTTP/1.1 500 Internal Server...'); 
    header('Content-Type: application/json; charset=UTF-8'); 
    die(json_encode(array('message' => 'ERROR', 'code' => 1337))); 
}