如何响应正确的服务器执行到Ajax Post方法?

时间:2013-08-22 14:13:45

标签: java javascript ajax jquery spring-mvc

我的应用程序中有一个非常简单的任务,它在选择事件后从组合框中检索数据。

当引发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;    
}

2 个答案:

答案 0 :(得分:0)

我首先要注释

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

否则Spring不知道从哪里获取这些字段并注入它们。

答案 1 :(得分:0)

唯一的问题是Controller返回的String参数。将控制器类型TaskUpdateStatusString更改为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事件处理程序中没有抛出任何错误并且数据正确显示。