2014-11-08 150 views
1

我对AJAX请求做出响应,但出现应用程序错误。 (例如数据验证失败)。如何注意用户?返回状态码并在客户端获取消息或直接向客户端发送错误消息

1.返回状态码,然后通过JS得到消息

$.ajax(options).done(function(response){ 
    if (response.status === 1){ 
     // no problem, do next action 
    } else { 
     alert (messages[response.status]); 
    } 
}); 

var messages = { 
    '0': 'Server Error', 
    '-1': 'Invalid Data', 
    ... 
} 

2.返回状态码,以及消息:

$.ajax(options).done(function(response){ 
    if (response.status === 1){ 
     // no problem, do next action 
    } else { 
     alert (response.message); 
    } 
}); 

哪一个更好?或者,最佳做法是什么?请注意,我们有双语应用程序。

就我个人而言,我认为第一个更好。因为我必须至少在我的JS文件中定义一条错误消息,以便发现服务器错误。 (当AJAX请求失败时,jQuery .fail())因此,如果我必须这样做一次,最好将所有消息收集在一起。

+0

如果使用选项1,请给用户一些方法来访问基础消息。 – Kolban 2014-11-08 03:35:26

+0

@Kolban:我不能明白你的意思。你能再解释一下吗? – mrdaliri 2014-11-08 04:08:29

+1

在您的第一个解决方案中,您通过提供自己的消息来“掩盖”从ajax调用返回的基础消息。这很好,并提供了关于这个问题的非技术背景。但是,您也正在失去可能在潜在响应消息中提供的“知识”(无论它说什么)。理想情况下,您提供两种类型的消息。第一个和主要是一个明确的用户消费信息,但另外,我还会尝试提供一种方式,让用户在需要时可以“获取”底层消息。 – Kolban 2014-11-08 04:11:43

回答

0

总的来说,我总是被教导和练习第二个。客户端验证非常好,但它不可靠,因为客户端也可以对其进行编辑,并且如果它们足够恶意就会造成严重破坏。

最好做服务器端验证并从那里返回消息。这给你和后端完全控制,用户不能弥补。你应该在你的ajax调用中遇到的主要错误是错误回调函数中的某种“内部服务器错误”。如果用户得到这个,那么这个调用就会失败,因为它不能读取服务器。除此之外的任何消息都意味着服务器已成功到达并对所有传入的数据执行内部验证,这些消息来自哪里。

如果你真的想要,你可以做两次验证。做出很好的jQuery验证,如果输入是完全错误的格式,不会让调用发生。但是,如果它确实到达服务器,那么您应该接受这样的印象,即不能相信任何传入的输入,直到在那里进行了明确验证。

希望这是提供信息。干杯。

+0

谢谢,但数据验证是一个例子。我的意思是任何与应用相关的错误或消息 – mrdaliri 2014-11-08 05:20:10

+0

实践依然如此。如果你需要一个基于通过ajax调用从服务器接收到的东西的真实消息,那么服务器给你的正确响应消息比你的javascript或jquery更加可靠。 – 2014-11-08 05:21:56

相关问题