Могу ли я оценить тип ответа при вызове $ .ajax () при успешном обратном вызове? - PullRequest
0 голосов
/ 15 ноября 2008

Я использую jQuery для выполнения AJAX-запроса к удаленной конечной точке. Эта конечная точка будет возвращать объект JSON в случае сбоя, и этот объект будет описывать сбой. Если запрос выполнен успешно, он вернет HTML или XML.

Я вижу, как определить ожидаемый тип запроса в jQuery как часть вызова $.ajax(). Есть ли способ определить тип запроса в обработчике success?

$.ajax(
    {
        type: "DELETE",
        url: "/SomeEndpoint",
        //dataType: "html",
        data:
            {
                "Param2": param0val,
                "Param1": param1val
            },
        success: function(data) {
                //data could be JSON or XML/HTML
            },
        error: function(res, textStatus, errorThrown) {
                alert('failed... :(');
            }
    }
);

Ответы [ 3 ]

4 голосов
/ 15 ноября 2008

Ваше приложение генерирует правильные заголовки Content-Type (application / json, text / xml и т. Д.) И обрабатывает их в обратном вызове. Может быть, что-то подобное будет работать?

xhr = $.ajax(
    {
        //SNIP
        success: function(data) {
                var ct = xhr.getResponseHeader('Content-Type');
                if (ct == 'application/json') {
                    //deserialize as JSON and continue
                } else if (ct == 'text/xml') {
                    //deserialize as XML and continue
                }
            },
         //SNIP
);

Не проверено, но стоит попробовать.

3 голосов
/ 15 ноября 2008

как насчет использования опции complete?

$.ajax({
   ...

   complete : function(xhr, status) {
   // status is either "success" or "error"
   // complete is fired after success or error functions
   // xhr is the xhr object itself

       var header = xhr.getResponseHeader('Content-Type');
   },

   ...
});
0 голосов
/ 15 ноября 2008

К тому времени, когда он вызывает ваш обработчик успеха, данные уже были десериализованы для вас. Вы должны всегда возвращать один и тот же тип данных для любого успешного результата. Если действительно есть ошибка, вам, вероятно, следует сгенерировать исключение и позволить ему обработаться обратным вызовом ошибки. Это должно быть в состоянии проанализировать полученную ошибку и упаковать ее для вашего обратного вызова, то есть он обнаружит, что ответ не имеет статуса 200 OK, и проанализирует результат, чтобы получить информацию об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...