我目前正试图掌握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;
}
答案 0 :(得分:2)
我认为你对客户端和服务器端有点混淆了。 你看起来java是正确的,但你的js试图访问jstl表达式($ {output})。呈现页面时jstl表达式将无法解析,这将在Ajax请求/响应发生之前解析。
你的js需要使用变量'data',这是你的java添加到模型的数据。像这样:
$("#result).html("<p>Param: " + data.output + "</p>");
这假定模型是json 希望这有帮助
答案 1 :(得分:1)
首次加载页面时,JSP代码会执行。此代码包含以下行:
$("#button").click(function(){
$.post(loadUrl, function(data){
alert("Data Loaded: " + data);
$("#result").html("<p>Param: ${output}</p>");
});
});
因此,JSP EL代码由容器解释,$ {output}由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>");
因此,从服务器收到的数据显示在警告框中,然后由“{”标识的HTML元素的内容被<p>Param: </p>
替换。