拥有一个基于其成功返回JSON或HTML的ajax是不好的做法吗?

dee*_*dee 2 ajax jquery

我有一个jQuery ajax函数,在调用失败时用HTML响应.如果调用成功,则以JSON响应:{"result":true}

    $.ajax({
        type: 'POST',
        dataType: 'html',
        success: function (response) {
            if (response.RESULT === true) {
                window.location.replace(baseUrl);
            } // else do something else and show errors
        }
    });
Run Code Online (Sandbox Code Playgroud)

但是,Firefox不会识别JSON中的结果,因为dataType设置为'html'.我试着把它留空,这没用.是否有工作,或者返回两件事是不是很糟糕?

这是注册表格.我正在返回HTML,因为它更容易显示用户验证(服务器端)错误,而如果注册成功,我会重定向它们.

Ale*_*tis 6

我认为AJAX调用应始终以相同的格式返回数据.仅在调用失败时才返回HTML是不好的做法.您可能总是返回一个JSON响应,其状态参数可以是成功错误,内容参数是HTML响应.


Zas*_*asz 5

返回两种不同格式的数据是不好的做法.该服务的消费者将不知道会发生什么,并且在相关的服务组中改变格式也是不好的做法(尽管一些特殊情况证明了这一点)

在你的情况下:

你可以做的是一直返回JSON,并且在错误的情况下以这种格式返回JSON:

{
   "errorsHtml" : "<div class='errors'>...</div>"
}
Run Code Online (Sandbox Code Playgroud)

您还可以利用HTTP状态代码标头来表示服务器的状态,例如状态500是服务器内部错误.您可以处理不同的状态代码,如下所示:

 $.ajax({
  statusCode: {
    404: function() {
      alert('page not found');
    }
  }
});
Run Code Online (Sandbox Code Playgroud)