1

好吧,基本上只是想在我的 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>

这是我的控制器类:

@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 (匿名函数) users:106 x.event.dispatch jquery.js:4 v.handle

本质上,我的目标是将每个用户的信息加载到带有表单的弹出模式中。虽然我必须先让这一步工作。谢谢

4

3 回答 3

1

您来自端口 80 上的网络服务器吗?如果是这样,那么您正在处理跨站点脚本问题,因为在不同的端口上仍然很重要。您可能想用 jQuery查看JSONP 。

编辑:这是一个教程。

于 2013-10-03T11:06:10.467 回答
0
succes: function(user){
                alert(user.id + " + " + user.username);
            },

也许它的成功而不是成功

于 2014-02-24T21:56:28.620 回答
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>

我强烈建议阅读Spring 参考指南网络章节应该能阐明这个问题。调用是否通过 AJAX 无关紧要,首先修复您的映射,然后添加 AJAX。

于 2013-10-03T11:11:18.420 回答