[英]How to receive error in jQuery AJAX response?
我正在使用 jQuery $.ajax() function 在 php 页面上执行数据库插入操作。 因此,如果成功,它将执行常规操作,但如果更新操作失败,我希望 ajax 调用接收错误。
所以应该是:
那么,我应该返回 false 吗? 来自我的 php function? 我认为 $.ajax() 成功或错误取决于 AJAX 调用是否成功。 所以,我认为即使我返回 false; 从我的 php function 来看,它仍将被视为 ajax 调用的“成功”。 正确的
您可以按照某人的建议在服务器响应(或使用 JSON)中返回错误消息。 但我不太喜欢它,因为这会污染返回的数据。
我喜欢我最近一直在使用的另一种方式,它涉及创建自定义 HTTP header 以通知是否有错误。
PHP 代码:
if($there_was_error){
header("DB_SUCCESS: 0"); //Sends a custom header
}else{
header("DB_SUCCESS: 1");
}
jQuery 代码:
$.ajax({
...
success: function(data, status, xhr){
//You can use your 'data' var as always
if(xhr.getResponseHeader("DB_SUCCESS") == 1){
alert("Save successful");
//Your regular sutff
}else{
alert("Save failed");
}
}
...
})
如您所见,我们创建了一个自定义 HTTP header,称为DB_SUCCESS
用作元数据,因此我们可以将其分配到服务器端(php)并使用客户端(javascript)读取它以了解是否有错误。
希望这可以帮助。 干杯
简而言之,这很简单:您可以捕获从 PHP 返回的任何内容。
详细说明:下面的代码片段可以帮助您清楚地理解问题。
PHP
$result = //your database result
if($result){
//Print any success message you want the user to see
echo "Success";
}else{
//Print any error message you want the user to see
echo "Error";
}
JQUERY
$.ajax({
type: "POST",
url: "controller.php",
data: params,
success: function(msg){
//Alert the returned message to the user,
//the variable msg already contains your message
//whether it is success or error,
//it can even contain HTML or JavaScript
alert(msg);
}
});
您需要在 $.ajax() 成功中处理 PHP 的成功/错误:function
假设这是您的 ajax.php:
if($whatever)
{
echo 'success';
}
else
{
echo 'fail';
}
假设这是您的 javascript $.ajax():
success: function(data)
{
switch(data)
{
case 'success':
// handle good logic
break;
case 'fail':
default:
// handle bad logic
break;
}
}
我评估来自服务器的响应,如果 PHP 发生错误,它只会输出 JavaScript 代码以显示错误。
适用于各种事情,包括会话超时重新登录、访问限制、异常处理和其他一切。
我希望这种方法会更受欢迎。
https://github.com/atk4/atk4/blob/master/templates/js/atk4_univ.js#L413
我会在 PHP 中建立一个数组。 如
$status['completed'] = true;
$status['message'] = "Completed";
取决于您如何 go 插入更改这两个值。
然后我会做http://php.net/manual/en/function.json-encode.php json_encode
并回显。 您的 jQuery 将收到JSON
,如果已completed
,则一切正常。 如果为假,请检查message
。
您还可以使用 jQuery 中的getJSON
方法使其更容易。
Ajax 正在客户端上发生。
您的 PHP 在服务器上已结束。
这是一个很好的例子,可能会有所帮助:
$.ajax({
type: "POST",
url: "login.php",
data: "action=login&user=" + user + "&pass=" + pass,
success: function(xhr){
if ((xhr == "Invalid Login")
|| (xhr == "Invalid charaters in username.")
|| (xhr == "Missing username or password.")
|| (xhr == "Unknown Error")) {
$("#loginMessageContent").html(xhr);
}
else {
simplemodalClose (dialog);
}
},
error: function(xhr) {
alert ("Oopsie: " + xhr.statusText);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.