2

我想知道在使用 jQuery 发出 ajax 请求时应该如何在服务器端处理错误和返回值。

我正在从 ajax 请求进行数据库插入,并且我想将数据库插入主键 ID 返回给 jQuery。但是,如果没有插入任何内容,或者某些验证失败,我想返回一个错误。我通常是这样做的:

这是我的ajax请求:

$.ajax({
    type: 'POST',
    url: "test.php",
    data: {stuff: stuff, stuff2: stuff2},
    success: function(response){
        switch( parseInt(response) ) {
            // Display different messages depending on return value
        }
    },
    error: function() {

    }
});

服务器端:

if (some validation) { echo 1; exit; }
if (other validation) { echo 2; exit; }
if (everything went okay) { echo database id; exit; }

您无需成为天才即可理解这是糟糕的编码。在这种情况下,最佳做法是什么?我应该返回一个 JSON 字符串吗?

谢谢你的帮助!

4

2 回答 2

0

JSON 运行良好。拥有一个带有“结果”键或“错误”键的 JSON 对象。

{result: [value]} or {error: [message]}

在您的 jQuery 回调中检查响应对象中的键

if("result" in response} {
    // success
} else {
    // error
    alert( (response.error || "ERROR") );
}

编辑您当然可以根据需要变得复杂。“Type”、“Value”、“Message”是一些常见的 JSON 键。

{
    type: [SUCCESS|WARNING|ERROR]
    value: [expected return value|array of warnings|array of errors]
    message: [some custom message to display to the user]
}
于 2013-02-11T20:11:14.340 回答
0

处理回调中的错误success非常令人惊讶,以至于其他人可能很难维护您的代码。如果您遵循 REST 原则,那么您将希望在来自服务器的响应中返回 4xx 状态代码。例如,返回400 Bad Request一般错误,409 Conflict如果存在某种资源冲突则返回等。然后,在error传递给的函数回调选项中处理错误响应ajax.

如果您只需要HTTP 状态代码的更多详细信息,您还可以返回一个 JSON 对象(甚至只是一个纯文本字符串),以更详细地解释问题。在我的 REST API 中,我通常只在响应正文中返回错误的纯文本描述,然后将响应 Content-Type 设置为"text/plain".

于 2013-02-11T20:24:04.610 回答