2013-10-03 78 views
1

基本上只是试图在我的spring web应用程序中实现一些ajax。出于测试的目的,我尝试编写一些代码,以便在他们按下链接/按钮时基于其个人“id”值检索“用户”信息。我假设这是一个服务器端错误,我的控制器有问题,虽然我不完全确定,需要帮助得到这个工作。这是我目前的JSP页面只是测试:403 Spring Ajax上的禁止错误GET请求

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

本质上,我旨在将每个用户的信息加载到带有窗体的弹出窗口模式中。尽管我必须先采取这一步骤。谢谢

回答

1

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

编辑:Here is a tutorial.

+0

是啊,我在内部运行它,以便端口为8080的时刻。 JSONP是否可以绕过这个问题? – Maff

0

首先控制器是错误的,你的映射不包括路径变量,所以我应该把它映射到?如您所呼叫/ AJAX,而你应该调用类似/ajax/<userid>其他控制器可以永远不知道你想要的用户

@RequestMapping(value = "/ajax/{id}", method = RequestMethod.GET) 
public @ResponseBody User getUser(@PathVariable Integer id) { 
    return usersService.getUser(id); 
} 

其次你的要求是错误的。

<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。

+0

谢谢你的回复。我已经实施了这些更改,似乎仍然存在相同的问题。还有什么我可以看的东西? – Maff

+0

尝试访问没有Ajax的网址,看看它是否产生回应。调用'http:// localhost:8080/SDP_v1.7/ajax/1'(或者你的id是什么)应该产生一个json结果。如果这有效,它必须是你的ajax调用,否则你的弹簧配置。 403意味着禁止使用Spring Security? –

+0

是的,我确实使用弹簧安全功能,但我已经允许旁路在配置中发生。 – Maff

0
succes: function(user){ 
       alert(user.id + " + " + user.username); 
      }, 

也许它的成功,而不是更迭