我的应用程序中有一个非常简单的任务,它在选择事件后从组合框中检索数据。
当引发select事件时,数据被传递给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 :(得分:0)
我首先要注释
public String TaskUpdateStatus(@RequestParam("idTask") Long idTask, @RequestParam("idStatus") Long idStatus, ...
否则Spring不知道从哪里获取这些字段并注入它们。
答案 1 :(得分:0)
唯一的问题是Controller返回的String参数。将控制器类型TaskUpdateStatus
从String
更改为void
就足够了,显然,它会抑制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
}
}
在Ajax post .done
事件处理程序中没有抛出任何错误并且数据正确显示。