2013-08-22 44 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

相关问题