我应该如何使用Ajax处理验证错误

How should I handle validation error using Ajax?

本文关键字:验证 错误 处理 Ajax 何使用 我应该      更新时间:2024-01-11

我有一个html格式的表单,我将在服务器端进行验证。如果验证失败,则更新errorDiv,否则更新resultDiv

我有两种选择来处理这个问题。我的朋友说验证失败应该在ajax调用的成功部分处理。虽然我认为把逻辑放在错误部分可能会更好。

他的一些担忧可能是:

  • 验证错误不是网络连接之类的错误故障,应该使用一些状态代码,如400;或任何服务器侧错误,其使用状态代码500

我担心的是:

  • 如果我们把逻辑放在错误部分,逻辑似乎更清晰
  • 我们可以使用其他状态代码(尽管我现在不知道)而不是400500来指示验证错误

我朋友的选择1:

$.ajax({
    type:'POST',
    data:someFormData,     
    url:'/submitToServer',
    success:function(data,textStatus) {
        if(data.hasValidationError){
            $('#errorDiv').html(data);
        }else{
            $('#resultDiv').html(data);
        }
    }
});

我的选择2:

$.ajax({
    type:'POST',
    data:someFormData,     
    url:'/submitToServer',
    success:function(data,textStatus) {
        $('#resultDiv').html(data);
    },
    error:function(XMLHttpRequest,textStatus,errorThrown){
        if(textStatus==500)
             $('#errorDiv').html(errorThrown);
    }
});

我知道这两种方法都可以处理验证错误,但哪种方法更好?你用哪种方式?请给我一些利弊。。。

非常感谢你们!

我不得不同意你的朋友。错误部分不是为该用途而设计的。官方文件上清楚地写着:

请求失败时要调用的函数。函数接收三个参数:jqXHR(在jQuery 1.4.x中,XMLHttpRequest)对象描述发生的错误类型的字符串,以及可选的异常对象(如果发生)。秒的可能值参数(除null外)为"timeout"、"error"、"abort"answers"parserror"。当发生HTTP错误时,errorThrown将接收HTTP状态的文本部分,如"未找到"或"内部"服务器错误。"

因此,错误回调必须仅用于处理属于HTTP状态的错误,而不是您自己的验证规则。