2013-10-03 3 views
1

Ну, в основном, просто пытаюсь реализовать какой-то ajax в моем весеннем веб-приложении. В целях тестирования я попытался написать некоторый код, чтобы получить «пользовательскую» информацию на основе их личных значений «id», когда они нажимают кнопку link /. Я предполагаю, что это ошибка на стороне сервера, что что-то не так с моим контроллером, хотя я не совсем уверен и нуждаюсь в помощи, чтобы это работало. Это моя текущая страница JSP только для тестирования:403 Запретная ошибка на весне Ajax GET Request

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

Edit: Here is a tutorial.

+0

Да, ну я бегу это внутренне, так что порт 8080 на данный момент. Является ли JSONP способом обойти эту проблему? – Maff

0

Первый контроллер неправильно, ваше отображение не включает в себя переменную пути, так, что она должна сопоставить?

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

Второй ваш запрос неправильно, как вы звоните/Аякса в то время как вы должны называть что-то вроде /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 не так, как он будет генерировать 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

Попробуйте получить доступ к URL-адресу без ajax и посмотреть, вызывает ли он ответ. Вызов 'http: // localhost: 8080/SDP_v1.7/ajax/1' (или независимо от вашего идентификатора) должен привести к результату json. Если это работает, это должен быть ваш ajax-вызов, иначе ваша конфигурация пружины. 403 означает, что запрещено использовать Spring Security? –

+0

Да, я использую весеннюю безопасность, хотя я уже разрешил обход в конфигурации. – Maff

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

может быть, его УСПЕХ вместо Succes

Смежные вопросы