如何在jQuery AJAX响应中收到错误?
我正在使用jQuery $ .ajax()函数在php页面上执行数据库插入操作。 因此,成功时它将执行常规操作但我希望ajax调用在更新操作失败时收到错误。
所以它应该是:
- $ .ajax – >调用php函数
- 成功记录插入后获得成功
- 不成功插入时收到错误
那么,我应该做一个假的回报; 从我的PHPfunction? 我认为$ .ajax()的成功或错误取决于AJAX调用是否成功。 所以,我想即使我回归虚假; 从我的PHP函数来看,它仍将被视为ajax调用的“成功”。 对
您可以按照建议的方式在服务器响应中(或使用JSON)返回错误消息。 但我不太喜欢它,因为这会污染返回的数据。
我喜欢我最近使用的另一种方式,它涉及创建自定义HTTP标头以通知是否存在错误。
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"); } } ... })
如您所见,我们创建了一个名为DB_SUCCESS
的自定义HTTP标头,用作元数据,因此我们可以将其分配给服务器端(php)并使用客户端(javascript)读取它以了解是否存在错误。
希望这可以帮助。 干杯
您需要在$ .ajax()success:function中处理PHP的成功/错误
假设这是你的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代码来显示错误。
适用于各种各样的事情,包括重新登录会话超时,访问限制,exception处理和其他一切。
我希望这种方法更受欢迎。
https://github.com/atk4/atk4/blob/master/templates/js/atk4_univ.js#L413
这很简单,简而言之:您可以捕获从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); } });
我会用PHP构建一个数组。 如
$status['completed'] = true; $status['message'] = "Completed";
取决于你如何使用插入更改这两个值。
然后我会做http://php.net/manual/en/function.json-encode.php json_encode
并回复它。 你的jQuery会收到JSON
,如果completed
是真的那么它就可以了。 如果为false ,请检查message
。
您还可以使用jQuery中的getJSON
方法使其更加简单。
Ajax正在客户端发生。
您的PHP已在服务器上完成。
这是一个很好的例子可能会有所帮助:
jQuery AJAXerror handling
$.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); } });