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

时间:2015-02-17 20:31:12

标签: javascript jquery ajax validation

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

我有两种方法可以解决这个问题。我的朋友说验证失败应该处理ajax调用的成功部分。虽然我认为把错误部分中的逻辑放得更好。

他的一些担忧可能是:

  • 验证错误不是网络连接等错误 失败应该使用像400这样的状态代码;或任何服务器 边错误,使用状态代码500。

我担心的是:

  • 如果我们把逻辑放在错误部分,逻辑似乎更清楚;
  • 我们可以使用其他一些状态代码(虽然我现在还不知道) 而不是400,500表示验证错误。

我朋友的选项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);
    }
});

我知道两种方式都可以处理验证错误,但哪种方式更好?你用哪种方式?请给我一些优点和缺点......

非常感谢你们!

1 个答案:

答案 0 :(得分:1)

我必须同意你的朋友。错误部分不是为该用途而设计的。它明确说明的官方文件:

  

请求失败时要调用的函数。该功能收到   三个参数:jqXHR(在jQuery 1.4.x,XMLHttpRequest中)对象,a   描述发生的错误类型的字符串和可选项   异常对象,如果发生了一个。第二个可能的值   参数(除了null)是“超时”,“错误”,“中止”和   “parsererror”。发生HTTP错误时,errorThrown会收到   HTTP状态的文本部分,例如“未找到”或“内部”   服务器错误。“

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