2015-06-08 2 views
1

Мое приложение бросает JSON.parse error, потому что Spring MVC возвращает вид, который поднимает XMLHttpRequest.jQuery, Ajax ничего не возвращает Весна MVC

$("#formId").submit(function(event){ 
     //var data = JSON.stringify($(this).serializeObject()); 
     var data = JSON.stringify({"dateSmoked":"26/05/2015 19:00", "excessiveness":10, "intakeMethod":"bong", "comments":"ping"}); 
     alert(data); 
     $.ajax({ 
      url: $(this).attr('action'), 
      type: 'POST', 
      data: data, 
      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      success: function (data) { 
       alert('Client created!! :-)') 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       alert('An error has occured!! :-('); 
       alert(jqXHR.responseText); 
       alert(textStatus); 
       alert(errorThrown); 
      } 
     }) 
     event.preventDefault(); 
    }); 

Код выше отправляет запрос POST к следующему контроллеру:

@RequestMapping(method=RequestMethod.POST, headers="Content-Type=application/json") 
@ResponseStatus(HttpStatus.CREATED) 
public String createSmokeEvent(@RequestBody SmokeEvent evt) 
{ 
    Account account = (Account) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
    System.out.println("Added"); 
    return "redirect:/users/"+account.getUsername(); 
} 

и контроллер возвращает вид - "redirect:/users/"+account.getUsername()". Сообщение XMLHttpRequest, которое я отправляю, похоже, пытается попытаться проанализировать ответ с сервера, который является html с возвращаемого сервера.

Я в основном хочу, чтобы приложение отправляло запрос POST на сервер и позволяло серверу обрабатывать все, что перенаправляется на страницу. Никакого ответа не было. Я не хочу, чтобы jQuery попытался разобрать все, что возвращает контроллер.

В настоящее время код всегда терпит неудачу, поскольку он пытается получить JSON.parse ответ HTML.

Возможно ли это?

+0

ли вы на самом деле хотите, чтобы браузер перенаправляется слишком ? –

+0

, изменив его на 'html', решил ошибку. Он успешно проходит сейчас, но не перенаправляет страницу. – SoftwareDude

+0

AJAX обычно не приводит к перенаправлению на новую страницу в вашем браузере. Вам либо не нужно будет использовать AJAX, либо вернуть URL-адрес для перенаправления и перенаправить в браузере с помощью JavaScript. –

ответ

0

Не уверен в ваших требованиях. В основном контроллер должен возвращать действительный JSON строку:

@RequestMapping(method=RequestMethod.POST, headers="Content-Type=application/json") 
@ResponseStatus(HttpStatus.CREATED) 
@ResponseBody 
public Map createSmokeEvent(@RequestBody SmokeEvent evt) 
{ 
    Account account = (Account) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
    System.out.println("Added"); 
    Map m = new LinkedHashMap(); 
    m.put("result", "ok"); 
    return m; 
} 
0

Я не знаком с весной, но я довольно хорошо знаком с JQuery и делаю AJAX звонков с ним. Он пытается разобрать ответ от вызова AJAX как JSON, потому что вы рассказали об этом (с этой опцией):

dataType: 'json', 

Если вы не собираетесь возвращаться JSON с сервера в ответ на запрос , не скажите jQuery ожидать JSON, и он не попытается разобрать его как таковой. Вы можете либо указать правильный тип данных, чтобы он соответствовал ответу (вероятно, «html» на основе описания проблемы), либо вообще не указывать dataType, и пусть jQuery угадывает, как он должен его обрабатывать.

0

Datatype в AJAX должен быть в формате JSON,

dataType: 'json' 

Затем используйте это ниже АЯКС успеха,

success: function(response) { 
    if (response.redirect) { 
     // data.redirect contains the string URL to redirect to 
     window.location.href = data.redirect; 
    } 
} 

Контроллер:

@RequestMapping(method=RequestMethod.POST) 
@ResponseStatus(HttpStatus.CREATED) 
public @ResponseBody String createSmokeEvent(@RequestBody SmokeEvent evt) { 
    Account account = (Account) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
    System.out.println("Added"); 
    return "redirect:/users/"+account.getUsername(); 
} 
+0

успешно проходит, но не перенаправляет страницу с помощью Spring MVC – SoftwareDude

+0

в порядке, попробуйте изменить dataType: 'json'. Затем успех: function (response) { if (response.redirect) { window.location.href = response.redirect; } }, – Twinkle

+0

отредактировал мой ответ выше, попробуйте. – Twinkle