2011-04-12 67 views
6

我正在构建一个Web应用程序,并想知道如何处理AJAX调用中的错误。例如,如果用户输入某些无效的数据(错误的电子邮件地址,用户已经存在),我希望能够从PHP中引发错误。为AJAX调用定制PHP错误

我在这里看到http://php4every1.com/tutorials/jquery-ajax-tutorial/您可以使用JSON对象并处理来自JQuery成功函数的错误报告,但这似乎不是正确的方式。当出现错误时,应该使用jQuery的错误函数对我来说是有意义的。我想我是那种事的坚持者。

下面是我现在正在做的事情。

//In my PHP file called from JQuery 
function error($msg) { 
    header("HTTP/1.0 555 ".$msg); 
    die(); 
} 
//Then that error is handled accordingly from JQuery 

所以我创造的555未被定义为错误代码什么和套结对我自己的自定义错误消息。这是做到这一点的正确方法吗?我应该只使用JSON吗?有一个标准的方式来发送这样的错误信息,对吧?

如果您需要查看更多我的代码以获得更好的想法,整个项目在github上:https://github.com/josephwegner/fileDrop。有问题的文件是config/phpFuncts.php

+1

没有理由为此创造一个新的状态码,如果它是一个用户输入验证错误400会做的罚款。它可以被认为是一个糟糕的请求(如在他们的请求主体 - 他们的用户输入 - 是畸形的)。 – Fleep 2012-06-06 18:54:23

回答

6

我只是使用一个JSON对象和一个200头的HTTP头。请求本身并没有错,而且你的服务器按照它应该的那样运行 - 错误位于抽象的不同层上。

2

400HTTP status codes系列表明请求存在问题。我会将响应代码设置为400,并将响应正文中的错误消息列表包含为JSON。

+0

同意。对于用户可以纠正的错误,使用400错误请求(如错误,他们有验证错误等)。对于数据库故障等服务器异常,致命错误等使用500级别的状态代码。 – Fleep 2012-06-06 18:53:15

+0

@Fleep Yup多数民众赞成在 – Michael 2012-06-06 19:18:25

2

我讨厌使用HTTP状态码来表示失败。 HTTP代码应该保留用于实际的HTTP级错误,并且与AJAX请求相关的错误应该通过JSON结构发回。

例如

$data = array() 
if (some big ugly computation fails) { 
    $data['errorcode'] = -123; 
    $data['error'] = true; 
    $data['success'] = false; 
    $data['errormessage'] = 'some helpful error message'; 
} else { 
    $data['success'] = true; 
    $data['error'] = false; 
    $data['response'] = 'whatever you wanted to send back....'; 
} 
echo json_encode($data); 

然后在客户端

if (data.error) { 
    alert('Request blew up: ' + data.errormessage); 
} 
+1

我不同意“HTTP代码应保留为实际的HTTP级错误”。 HTTP是一种协议,其中的状态代码反映了服务的响应。 4xx响应代码应该用于客户负责的问题,5xx响应代码应该用于服务器负责的问题 – Fleep 2012-06-06 18:52:27

+2

如果我开车去商店,他们没有我想要的东西,不要把这次旅行叫做失败 - 这辆车运转正常,我停下来,我回到家里 - 空手而归。 AJAX服务本身的错误应该在服务响应文本中发出,而不是在HTTP层。在“失败”的ajax调用上返回404应该意味着“嘿,服务文件丢失”,而不是“抱歉,数据库中的记录不存在”。 – 2012-06-06 18:59:57

+0

HTTP状态代码旨在以这种方式使用。 “400错误请求”并不意味着HTTP失败。如果HTTP失败,你根本得不到错误响应。 HTTP不报告它自己的性能。 – Fleep 2012-06-06 19:37:18