2014-11-08 152 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

相關問題