2015-04-21 9 views
0

Я пытаюсь реализовать простой jQuery ajax-вызов. Все выглядит нормально в первую очередь, поскольку параметры доставляются контроллеру, но функция всегда возвращает ошибку, которая не очень хороша, если я хочу обновить некоторые элементы на странице после того, как желаемое действие будет завершено. Я видел, что на эту тему уже есть пара вопросов, но не из них помогли мне до сих пор. Пожалуйста, помогите, если вы заметили ошибку в следующем коде. ThxФункция jQuery ajax всегда возвращает ошибку

$(document).ready(function() { 

$('#link').click(function() { 
    $.ajax({ 
     url: "http://localhost:8085/KPIAdmin/kpis/get", 
     type: "GET", 
     data: { 
      param1: "value1", 
      param2: "value2" 
     }, 
     success: function() { 
      alert("Success!"); 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { 
      console.log(jqXHR); 
      console.log(textStatus); 
      console.log(errorThrown); 
     }, 
    }); 
}); 

}); 

На стороне сервера

@RequestMapping(value="/get", method=RequestMethod.GET) 
public void ajaxGetKPI(@RequestParam("param1") String param1, @RequestParam("param2") String param2) { 

    System.out.println("param1: " + param1); 
    System.out.println("param2: " + param2); 
} 

Журнал ошибок

Object { readyState: 4, getResponseHeader: .ajax/v.getResponseHeader(), getAllResponseHeaders: .ajax/v.getAllResponseHeaders(), setRequestHeader: .ajax/v.setRequestHeader(), overrideMimeType: .ajax/v.overrideMimeType(), statusCode: .ajax/v.statusCode(), abort: .ajax/v.abort(), state: .Deferred/d.state(), always: .Deferred/d.always(), then: .Deferred/d.then(), 11 weitere… } ajaxGetKPI.js:24 
"error" ajaxGetKPI.js:25 
"Not Found" 
+0

я добавил 'DATATYPE: «json'' прямо под' type: «GET», но, к сожалению, он не решил мою проблему. – amsalk

+1

Я думаю, что проблема заключается в сервере/службе, а не в запросе Ajax. Вы пытались сделать GET в браузере? – Andrew

+0

Вы правы! Thx проблема была на стороне сервера. 'ajaxGetKPI()' метод должен возвращать somethig или, точнее, имя строки веб-страницы, которое будет отображаться с помощью средства просмотра вида, поскольку оно не возвращает никаких данных или json. Как только я добавил 'return' redirect:/kpis ";' все было хорошо. 'dataType: 'json'' не требуется в вызове ajax. – amsalk

ответ

1

Если контроллер объявляет тип возврата недействительным, Spring будет выводить имя вида. В вашем случае он будет искать имя вида get, следовательно Not found error.

Вы можете аннотировать контроллер с @ResponseBody, чем ответ будет возвращен внутри тела, но, так как тело будет пустым лучшим вариантом является Retrun в ResponseEntity что-то вроде

@RequestMapping(value="/get", method=RequestMethod.GET) 
public ResponseEntity<String> void ajaxGetKPI(@RequestParam("param1") String param1, @RequestParam("param2") String param2) { 
    System.out.println("param1: " + param1); 
    System.out.println("param2: " + param2); 
    new ResponseEntity<String>("OK",HttpStatus.NO_CONTENT); 
} 
+0

Точно! Как только я выполнил GET в браузере, я заметил то же самое. Thx – amsalk

+0

отличный, np, рад, что вы его разрешили –

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