2013-08-22 43 views
0

我的應用程序中有一個非常簡單的任務,它在選擇事件後從組合框中檢索數據。如何響應正確的服務器執行Ajax Post方法?

當選擇事件引發時,數據被傳遞給一個jQuery函數,它從服務器端請求操作。

所有這些東西都沒問題,但在處理服務器的響應時,Ajax接收到請求失敗的條件。由於我是jQuery和Ajax的新手,我不知道我應該錯過什麼或者做錯了什麼。

jsp的片:

<input id="updStatus" 
    class="easyui-combobox" 
    name="updStatus" 
    data-options=" 
    valueField:'id', 
    textField:'Name', 
    url:'StatusListCombo', 
    onSelect:function updStatusTask(row) { 
     $.fn.updStatusTask(row.id, ${task.id}); 
    }"> 

jQuery函數:

$.fn.updStatusTask = function (idStatus, idTask) { 
    var result = $.post("TaskUpdateStatus", { 
    idTask : idTask, 
    idStatus : idStatus 
    }); 

    result.done(function(data) { 
    alert("data: " + data); //<--NOT REACHED!! 
    }); 
    result.fail(function(jqXHR, textStatus) { 
    alert("fail data: " + textStatus); //FIRED 
    }); 
    result.always(alert("always"));//FIRED 
}; 

了Serverside方法:

@RequestMapping(value = "/TaskUpdateStatus") 
public String TaskUpdateStatus(Long idTask, Long idStatus, HttpSession httpSession, HttpServletResponse resp) throws IOException { 

    String result = new String(); 
    try { 
    //... do DAO opperations to persist, everything Ok... 
    resp.setStatus(200); 
    result = "Task successfully updated."; 
    } 
    catch(Exception e) { 
    result = "Error: " + e.getMessage(); 
    } 

    return result;  
} 
+0

什麼是失敗請求? – enginefree

+0

@enginefree,好問題。 [數據]參數只顯示「錯誤」。我能獲得關於這個錯誤的更多信息嗎? – Alex

+0

而不是'e.getMessage()',只需嘗試'e.toString()'。 – enginefree

回答

0

唯一的問題是Controller返回的字符串參數。這是足夠的改變控制器類型TaskUpdateStatusStringvoid,顯然,抑制return聲明。

相反,將文本返回給jQuery事件處理程序並進行處理並顯示的正確方法是使用response.getWritter().write("something")

@RequestMapping(value = "/TaskUpdateStatus") 
public void TaskUpdateStatus(Long idTask, Long idStatus, HttpSession httpSession, HttpServletResponse resp) throws IOException { 

    String result = new String(); 
    try { 
    //... do DAO opperations to persist, everything Ok... 
    resp.getWriter().write("Status changed from " 
      + oldStatusName + " to " + newStatusName); 
    resp.setStatus(200); 
    } 
    catch(Exception e) { 
    //... take care of exceptions 
    } 

} 

沒有錯誤被拋出和基準在阿賈克斯後.done事件處理程序正確地展出。

0

我會通過註釋

public String TaskUpdateStatus(@RequestParam("idTask") Long idTask, @RequestParam("idStatus") Long idStatus, ... 
0開始

否則Spring不知道從哪裏獲得這些字段並注入它們。

+0

所有的任務都可以根據需要選擇。唯一的問題是Ajax最終收到失敗。 – Alex

+0

@Alex你能告訴我們它正在接收的狀態碼和Spring提供的輸出是什麼?在我看來,你的控制器方法正在執行。 –

+0

是的,我的控制器方法完全可以執行。數據庫更改,不會引發任何錯誤(我在Debug中已經完成了它)。這一切都按預期行事。即使更新了jsp頁面,也會顯示該任務的新狀態。但是我想提供反饋意見,告知操作成功(警報或者簡單消息)。我認爲這只是正確操縱響應,或者爲函數提供正確的回報,就像這樣。感謝您的幫助! – Alex

相關問題