2012-04-17 44 views
0

我想知道如何處理使用jquery $ post從Struts2行動結果的錯誤。Struts 2的行動結果和jquery POST

舉例來說,在我的strut2.xml我已經處理使用錯誤的以下內容:

<action name="helloWorld" class="net.roseindia.Struts2HelloWorld"> 
    <result="success">/pages/HelloWorld.jsp</result> 
    <result="error">/pages/HelloWorld.jsp</result> 
</action> 

在我的jQuery的電話,我有以下幾點:

$.post("helloWorld", function(){ 

}).success(result){ 
    $("#div").html(result); 
}).error(){ 
    alert("ERROR"); 

}; 

即使結果等於錯誤,它總是成功。

那麼我怎麼能讓結果=「錯誤」轉到我的jquery調用中的$ .post錯誤?

回答

2

這是「成功」,因爲不管什麼「回來」,你將有一個AJAX成功的請求/響應。你需要做的是從servlet中設置一些「失敗」通知,然後檢查「成功」塊中返回的內容。

「成功」表示請求返回了「2xx」代碼。 「錯誤」是指非2xx成功:

更多的HTML代碼在這裏:http://www.w3.org/Protocols/HTTP/HTRESP.html

所以像這樣的事情(不是有用的代碼,但你會明白我的意思

$.post("helloWorld", function(){ 

}).success(result){ 
    if(result == some error condition) { this.error;} 
else { //process the success 
     $("#div").html(result); 
} 
    }).error(){ 
    alert("ERROR"); 

}; 

編輯:安東尼在下面發表評論說,由於用戶在控制被請求的服務/頁面 - 你可以用一種方式來構建servlet /代碼,以返回一個html錯誤代碼,而不是詢問結果html - 這是一個很好的建議。謝謝安東尼

+1

「您需要做的是從servlet中設置一些」失敗「通知,然後檢查」成功「塊中返回的內容。」爲什麼?如果你不能從Struts 2中返回一個錯誤狀態代碼,並且因此導致'.error()'回調函數被執行,我會非常驚訝。 – 2012-04-17 21:41:51

+0

返回的結果是一個html頁面...所以我怎麼能捕獲這個結果==一些錯誤條件? – newbie 2012-04-17 21:41:58

+0

是否可以將結果與返回的頁面名稱進行比較?我很困惑 – newbie 2012-04-17 21:43:50