基本上只是尝试在我的spring web应用程序中实现一些ajax。出于测试目的,我尝试编写一些代码,以便在按下链接/按钮时根据个人的“id”值检索“用户”信息。我假设这是一个服务器端错误,我的控制器出了问题,虽然我不完全确定并且需要帮助才能使其工作。这是我目前用于测试的JSP页面:
<c:forEach var="user" items="${users}">
<tr>
<td><c:out value="${user.id}" /></td>
<td><c:out value="${user.name}"/></td>
<td><c:out value="${user.username}"/></td>
<td><c:out value="${user.email}"/></td>
<td><c:out value="${user.dob}"/></td>
<td><c:out value="${user.authority}"/></td>
<td>
<a class="update" href="<c:url value="/viewUser"><c:param name="id" value="${user.id}"/></c:url>"><button>Update</button></a>
</td>
<td>
<a class="delete" href="<c:url value="/deleteUser"><c:param name="id" value="${user.id}"/></c:url>"><button>Delete</button></a>
</td>
<td>
<a class="ajax" href="<c:url value="/ajax"><c:param name="id" value="${user.id}"/></c:url>">Ajax</a>
</td>
</tr>
</c:forEach>
</table>
<script type="text/javascript">
$(document).ready(function(){
$('.ajax').click(function(e){
e.preventDefault();
$.ajax({
url:"http://localhost:8080/SDP_v1.7/ajax",
type: 'GET',
dataType:'json',
contentType: 'application/json',
mimeType: 'application/json',
succes: function(user){
alert(user.id + " + " + user.username);
},
error:function(user,status,er) {
alert("error: "+user+" status: "+status+" er:"+er);
}
});
});
});
</script>
这是我的Controller类:
@RequestMapping("/viewUser")
public String updateUser(Model model, @RequestParam(value = "id", required = false) Integer id) {
User user = usersService.getUser(id);
model.addAttribute("user", user);
return "settings";
}
@RequestMapping(value = "/ajax", method = RequestMethod.GET)
public @ResponseBody User getUser(@PathVariable Integer id) {
return usersService.getUser(id);
}
这是我在控制台中弹出的错误:
GET http://localhost:8080/SDP_v1.7/ajax 403 (Forbidden) jquery.js:5
发送jquery.js:5 x.extend.ajax jquery.js:5 (匿名函数)用户:106 x.event.dispatch jquery.js:4 v.handle
基本上,我的目标是将每个用户的信息加载到带有表单的弹出模式中。虽然我必须先迈出这一步。感谢
答案 0 :(得分:1)
你是来自80端口的网络服务器吗?如果是这样,那么您正在处理跨站点脚本问题,因为在不同的端口上仍然很重要。您可能需要查看JSONP with jQuery。
答案 1 :(得分:0)
首先你的控制器是错误的,你的映射不包含路径变量,那么应该映射到什么?
@RequestMapping(value = "/ajax/{id}", method = RequestMethod.GET)
public @ResponseBody User getUser(@PathVariable Integer id) {
return usersService.getUser(id);
}
第二个你的请求是错误的,因为你正在调用/ ajax,而你应该调用类似/ajax/<userid>
的东西,否则控制器永远无法知道你想要哪个用户。
<script type="text/javascript">
$(document).ready(function(){
$('.ajax').click(function(e){
var url = $(this).attr("href");
e.preventDefault();
$.ajax({
url: url,
type: 'GET',
dataType:'json',
contentType: 'application/json',
mimeType: 'application/json',
succes: function(user){
alert(user.id + " + " + user.username);
},
error:function(user,status,er) {
alert("error: "+user+" status: "+status+" er:"+er);
}
});
});
});
</script>
第三,你的jsp是错的,因为它会产生一个没有id的URL(没有路径变量而是请求参数)。使用<spring:url ../>
以方便使用。
<a class="ajax" href="<spring:url value="/ajax/{id}"><spring:param name="id" value="${user.id}"/></spring:url>">Ajax</a>
我强烈建议您阅读the Spring Reference Guide,web chapter应该了解此事。调用是否通过AJAX进行无关紧要,首先修复映射,然后添加AJAX。
答案 2 :(得分:0)
succes: function(user){
alert(user.id + " + " + user.username);
},
也许是它的成功而不是成功