2011-07-27 10 views
9

Mam kontroler MVC Java Spring, który może rzucić wyjątek. Mam konfigurację @ExceptionHandler do obsługi tych błędów i chciałbym użyć jej do zwrócenia wiadomości wyjątku do osoby dzwoniącej.jQuery .error jqXHR.responseText jest pusty

kod serwera jest:

@ExceptionHandler(DeviceException.class) 
    @ResponseStatus(HttpStatus.METHOD_FAILURE) 
    @ResponseBody 
    public String handleException(DeviceException ex) { 
     return ex.getMessage(); 
    } 

Ja testowałem rzucanie DeviceException i uzyskanie wyniku korzystania Curl z CLI, wiadomość Wyjątkiem jest zwracane w organizmie reakcji. Nie mogę uzyskać obsługi .error jQuery, aby wyświetlić go jednak mój kod obsługi jest:

  error: function(jqXHR, textStatus, errorThrown) { 
       // problem, the data is always blank 
       alert('jqXHR.responseText = ', jqXHR.responseText); 
      } 

Wszystko co kiedykolwiek za responseText jest pustym ciągiem. W jaki sposób uzyskać ciąg zwracany przez @ExceptionHandler do wyświetlania w obsłudze błędów jQuery?

+0

Jestem zirytowany, że to tak trudno Napraw ten podstawowy problem, wezmę każdą pomoc, jaką mogę uzyskać bez względu na losowość :) –

+0

Mam podobny problem. jqXHR.responseText jest ustawiony w chrome, ale nie FF 3.6. Piszę "application/x-www-form-urlencoded" i otrzymuję "application/json" - czy to łamanie protokołu? – rynop

+0

Czy możesz opublikować kompletną odpowiedź HTTP? –

Odpowiedz

0

spróbować czegoś takiego:

var msg = '<div style="padding:20px;">'; 
msg += "We're sorry, there was an error during your request. Please refresh the page, then try again. If your problem persists, please contact technical support. <br /><br /> <b>Cause:</b> <br /> "; 
switch (textStatus) { 
    case ('timeout'): 
     msg += 'Request timed out.'; 
     break; 
    case ('error'): 
     msg += 'Error status returned.'; 
     break; 
    case ('abort'): 
     msg += 'Request was aborted.'; 
     break; 
    case ('parseerror'): 
     msg += 'There was an error parsing your request.'; 
     break; 
    default: 
     msg += 'No status returned.'; 
     break; 
} 
$(this).html(msg + ' <br /><br /> ' + errorThrown + ' <br /></div>'); 
0

miałem bardzo podobny problem i dziwnie było ustalone poprzez włączenie tego projektu użyć IIS Express w Visual Studio 2012.