2012-09-18 2 views
3

В моем веб-сервисе подробно описывается связанная ошибка в теле http. Как я могу получить доступ к этим данным в запросе dojo.Доступ к HTTP-телу по ошибке запроса Dojo

Например, ошибка HTTP выглядит следующим образом:

HTTP/1.1 500 Internal Server Error 
Transfer-encoding: chunked 
Content-type: application/json 
Date: Tue, 18 Sep 2012 18:47:31 GMT 

15 
This is my exception! 
0 

Мой Dojo запрос выглядит следующим образом:

require(["dojo/dom", "dojo/on", "dojo/request", 
     "dojo/json", "dojo/domReady!"], 
    function(dom, on, request, JSON){ 
     // Results will be displayed in resultDiv 
     var resultDiv = dom.byId("errorResult"); 

     // Attach the onclick event handler to the makeRequest button 
     on(dom.byId('errorButton'),"click", function(evt){ 
      request.get("./rest/test/error", { 
       // Parse data from JSON to a JavaScript object 
       handleAs: "json" 
      }).then(function(data){ 
       resultDiv.innerHTML = "Username: " + data.name + "</br>Role:" + data.role; 
      }, 
      function(error){ 
       // Display the error returned 
       resultDiv.innerHTML = error; 
      }); 
     }); 
    } 
); 

Отображаемая ошибка в это:

RequestError: Unable to load ./rest/test/error status: 500 

И что я хотел бы иметь текст в теле:

This is my exception! 

ответ

3

Посмотрите на мой ответ на How to retreive XHR response code (+timestamp) of AMD'ized Dojo?

Использование deferred.response.then вместо deferred.then:

var deferred = request.get("./rest/test/error", { handleAs: "json" }); 

deferred.response.then(
    // success 
    function(response) { 
     console.log("data:", response.data);  // parsed json 
     console.log("http body:", response.text); // raw text 
    }, 
    // error 
    function(error) { 
     var response = error.response; 
     console.log("http body:", response.text); 
    } 
); 

в действии на jsFiddle: http://jsfiddle.net/phusick/SGh5M/

+1

Работает как шарм! Благодаря! – Reini

0

Когда я использовал додзё для запросов Ajax, метод ошибки всегда имел более одного параметра. Я думаю, что первым параметром является запрос, который был отправлен, а второй параметр - ответ или исключение.

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

+0

вы имеете в виду Somthing как это: функция (ошибка, test) {alert (test);} это будет предупреждать: undefined – Reini

+0

ok, что означает, что второй параметр не передан, поэтому мой комментарий выше неверен. –

+0

Я только что заметил, что ваш тип контента настроен на application/json, но ваше тело - это обычный текст. Не уверен, что это проблема, но может быть где-то начать отладку. –

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