Поддерживает ли jQuery чтение JSON из заголовков X-JSON HTTP? - PullRequest
1 голос
/ 29 ноября 2009

Может ли jQuery считывать данные JSON из HTTP-заголовков X-JSON, возвращаемых сервером?Я искал в документах jQuery, но все примеры, которые я могу найти, используют JSON, возвращенный в теле запроса, а не в заголовках.

Ответы [ 2 ]

5 голосов
/ 29 ноября 2009

Да, вам нужно вызвать метод getResponseHeader объекта XMLHttpRequest и выполнить десериализацию JSON вручную:

function getHeaderJSON(xhr) {
  var json;
  try { json = xhr.getResponseHeader('X-Json') }
  catch(e) {}

  if (json) {
    var data = eval('(' + json + ')'); // or JSON.parse or whatever you like
    return data
  }
}

Обратите внимание, что try / catch для некоторых версий Firefox, где, если заголовок отсутствует, выдается ошибка. Я не могу вспомнить, какие версии были затронуты.

У вас есть несколько способов получить ссылку на объект XMLHttpRequest в jQuery:

  1. подключается к обратному вызову complete запроса ajax, в отличие от ожидаемого обратного вызова success (jQuery является своего рода непоследовательным по отношению к тому, какие аргументы передаются в каком порядке, чему функция обратного вызова или глобальный триггер ajax):

    $.ajax({
      // ...
      complete: function(xhr) {
        var data = getHeaderJSON(xhr);
        // do with data as you wish
      }
    })
    
  2. В качестве альтернативы вы можете сохранить ссылку на объект XMLHttpRequest, возвращенный вам из вызовов .ajax / .get / .post и т. Д., Через Closure . Это позволяет вам использовать его внутри любого обратного вызова, который вы выберете (например, success или complete, или error):

    var xhr = $.ajax({
      // ...
      success: function() {
        var data = getHeaderJSON(xhr); // access xhr var via closure
        // do with data as you wish
      }
    });
    

Итак, чтобы ответить на ваш заголовок напрямую: нет, jQUery явно не поддерживает этот OOTB.

1 голос
/ 18 февраля 2010

с 1.4 успеха jQuery: обратный вызов получает XMLHttpRequest - (data, textStatus, XMLHttpRequest). Так что вам больше не нужно использовать полный обратный вызов, как описано выше.

Хотел бы я ответить на предыдущий ответ вместо добавления нового ответа.

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