2008-11-14 2 views
0

Я использую 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... :('); 
      } 
    } 
); 

ответ

4

У вас есть приложение, создающее правильные заголовки 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 
); 

Непрошеный, но это стоит сделать.

+0

Хотя ответ Оуэна уместен, полный обратный вызов не получает данные, поэтому вам нужно использовать аналогичный шаблон (хранить данные за пределами области действия метода ... в полном объеме). Я пошел с этим методом, потому что думал, что он чище. – 2008-11-15 03:03:40

0

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

+0

У меня есть метод, который возвращает JSON в некоторых случаях и HTML в других. Причина, по которой он возвращает описание ошибок JSON, заключается в том, что это объект, который описывает все ошибки проверки данных на стороне сервера. Это похоже на подходящую модель. Не согласен? – 2008-11-15 03:04:46

3

Как насчет использования опции 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

Да, это даже лучше, чем я предложил. – dowski 2008-11-14 21:56:44

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