0

我目前正在尝试掌握 AJAX,并且在访问模型对象时遇到问题。

我的测试代码所做的是从下拉列表中获取选定项的值,当按下按钮时,它将这个值传递给AjaxTest(),它将参数附加到模型,但我似乎无法输出模型对象 -我想知道为什么会这样?

绝对是有价值的param

<div id="result"></div>

<script type="text/javascript">

    var param = document.getElementById("blah").value;

    var loadUrl = "/ajax/" + param;  
    $("#button").click(function(){  

        $.post(loadUrl, function(data){
            alert("Data Loaded: " + data);
            $("#result").html("<p>Param: ${output}</p>"); 
        });
    });  
</script>


@RequestMapping(value = "/ajax/{param}", method = RequestMethod.POST)
public @ResponseBody String AjaxTest(@PathVariable String param, final ModelMap model){

    model.addAttribute("output", param);
    return param;
}
4

2 回答 2

2

我认为您对客户端和服务器端有点混淆。您的 java 看起来是正确的,但您的 js 正在尝试访问 jstl 表达式( ${output} )。当页面呈现时,jstl 表达式不会解析,这将在 Ajax 请求/响应发生之前。

您的 js 需要使用变量“数据”,这是您的 java 添加到模型的数据。像这样的东西:

$("#result).html("<p>Param: " + data.output + "</p>");

这假设模型是 json 希望这有帮助

于 2012-05-08T20:42:04.127 回答
1

首次加载页面时,将执行 JSP 代码。此代码包含以下几行:

$("#button").click(function(){  

    $.post(loadUrl, function(data){
        alert("Data Loaded: " + data);
        $("#result").html("<p>Param: ${output}</p>"); 
    });
});

因此,JSP EL 代码由容器解释,并且 ${output} 被替换为输出属性的值。由于此属性为 null,因此生成以下 HTML 代码并将其发送到浏览器:

$("#button").click(function(){  

    $.post(loadUrl, function(data){
        alert("Data Loaded: " + data);
        $("#result").html("<p>Param: </p>"); 
    });
});

当您单击该按钮时,将执行上述 JavaScript 代码。它向 ajax URL 发送一个 AJAX 请求,当响应返回时,它执行回调函数:

alert("Data Loaded: " + data);
$("#result").html("<p>Param: </p>");

因此,从服务器接收到的数据会显示在一个警告框中,然后由“result”标识的 HTML 元素的内容被替换为<p>Param: </p>.

于 2012-05-08T20:42:36.837 回答