使用jquery post从控制器获取值

时间:2012-09-13 23:04:55

标签: jquery post spring-mvc

从jquery发帖子。 POST正在发生,但无法访问控制器添加的模型属性。

JQuery代码:

$.post('<c:url value="/savedLog.form" />', $('#logForm').serialize(), function(data, textStatus) {
    var jsonlog = "${logJson}"
    if (data === "SUCCESS") {
        alert(jsonlog);
    }
});

控制器:

public String savedLog(@RequestParam(value = "requestId", required = true) LogRequest request, ModelMap model) throws IOException 
{
    try 
    {
        //Code to populate log            
        model.addAttribute("logJson", log.getLog());
        return "success";
    }​
}

POST工作正常,控制器方法正在成功执行。实际代码中有一个catch.Removed,因为它是多余的。

可能是什么问题。 这条线不起作用。     var jsonlog =“$ {logJson}”     模型属性或jquery有问题吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

看起来您混淆了生成页面的请求(包含AJAX表单)以及在AJAX POST发生时调用的请求。

var jsonlog = "${logJson}"

只会在第一个(页面)请求中填充。一旦呈现,AJAX POST就无法将JSTL值注入页面。

您需要将来自AJAX POST的响应中的值作为文本或JSON数据发送,然后从.POST回调中的data var中读取该值。添加@ResponseBody注释告诉Spring返回JSON(可能需要添加Jackson库)并返回Map ...

public @ResponseBody Map<String, String> savedLog(@RequestParam(value = "requestId", required = true) LogRequest request, ModelMap model) throws IOException {
try {
    //Code to populate log            
    //model.addAttribute("logJson", log.getLog());
    Map <String, String> map = new HashMap<String, String>();
    map.put("logJson", log.getLog());
    return map;
}​

然后在AJAX代码中,阅读:

$.post('<c:url value="/savedLog.form" />', $('#logForm').serialize(), function(data, textStatus) {

    if (data.logJson) {
        alert(data.logJson);
    }
}, "json"); // Note JSON dataType specified here

注意:您不应该返回成功&#34;成功&#34;作为控制器中的文本。使用HTTP代码,例如如果发生错误,则抛出404或500(通过HttpServletResponse对象),否则当您返回地图时状态将自动为200.