簡體   English   中英

處理來自Servlet的Jquery AJAX響應中的異常

[英]Handling exception in Jquery AJAX response from Servlet

我的servlet代碼是

try{
    //something
    response.setStatus(201);
    out.print("Data successfully saved");
}
catch(SomeException e){
    response.sendError(400, e.getMessage());
}

我的JQuery Ajax函數有成功和錯誤塊,如下所示:

$.ajax({
    type:'POST',
    data: {
        //some data to be passed
    },
    dataType: 'text',
    url:'AjaxController',
    success: function(response){
        alert(response);
    },
    error: function(jqXHR, textStatus, message) {
        //error handling
    },
    complete: function(){
        //window.location.reload(true);
    } 
});

servlet中的異常可以有不同的消息,所以我的目的只是將狀態代碼和消息傳遞給客戶端,以便它可以在一個范圍內顯示。 如果成功,成功塊正在接收響應,我看到我在out.print()寫的任何內容都在其中。

但是如果出現錯誤顯示消息,我有兩個選擇:

  1. 在成功寫入out.print和成功阻止Ajax函數中,使用狀態代碼編寫多個檢查,並決定是顯示成功消息還是錯誤消息。 我並不贊成這一點,因為我感覺它緊密耦合,並且仍然在執行成功操作時執行錯誤的請求或異常。

  2. 使用response.sendError(status_code::int, e.getMessage()::String)盡管這樣可以確保調用Ajax中的錯誤塊,但sendError API會創建一個HTML頁面,然后放入我的消息並發送它,我無法直接訪問。 所以在AJAX中,我將被迫編寫一個解析器來獲取異常消息。 這在我看來也不是NO。

我該如何實現這種異常處理?

我試圖以最好的方式解釋,如果需要更多信息,請告訴我。 它是一個簡單的API,客戶端使用表單數據調用servlet,表單數據在服務器中創建/更新,或者在某些條件不匹配時失敗。 並且在一個范圍內,在同一表單頁面中顯示該成功或異常信息。

我試過這個,發現狀態400的異常現在進入錯誤塊,我能夠在錯誤塊內部用jqXHR.responseText檢索消息。 我已經做了:

response.setStatus(400);
out.print(e.getMessage());
out.flush();
var response = $.parseHTML(xhr.responseText);
if(xhr.status == 400) {
    alert($(response).filter( 'h1' ).text());
}

您可以使用上面的代碼過濾狀態代碼,然后打印從服務器發送的修改后的消息。

JSP可能看起來像這樣

response.sendError(400, "Length too long");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM