jQuery.ajax для * только * получения кода состояния, но не для получения / загрузки всего документа?

У меня есть приложение, которое использует jQuery.ajax опросить ресурс, чтобы узнать, существует ли он. (В фоновом режиме есть служба, которая генерирует ресурс). Когда ресурс больше не имеет статуса 404, мое приложение перенаправляется на этот ресурс для просмотра. У меня вопрос... могу ли я получить статус, не загружая все содержимое документа? Если PDF, который он запрашивает, очень большой, я боюсь, что будет просто неэффективно получить статус 200 и загрузить документ с помощью jquery, а затем отбросить его и перенаправить к рассматриваемому документу.

Вот что я делаю (coffeescript):

class PDFPoller

  constructor: (@url) ->

  pollForPDF: ->
    @timeout = setTimeout(@poll, 3000)

  poll: =>
    jQuery.ajax(@url, complete: @verifyPDF)

  verifyPDF: (jqXHR, textStatus) =>
    console.log jqXHR.status
    if jqXHR.status != 404
      window.location = @url
    else
      @pollForPDF()

  @isGeneratingPDF: ->
    $(".js_pdf_gen_notice").length > 0

  @events: =>
    if @isGeneratingPDF()
      poller = new PDFPoller($(".js_pdf_gen_notice").data('url'))
      poller.pollForPDF()

$(document).on 'ready', ->
  PDFPoller.events()

2 ответа

Решение

Вы не можете получить только код состояния, но вы можете запросить только заголовки HTTP.

Использовать HEAD метод. Затем вы можете проверить состояние объекта jqXHR.

jQuery.ajax("/", { type: "HEAD"}).done(
    function (data, textStatus, jqXHR) {
        console.log(jqXHR.status);
    }
);

Я не могу найти обратный вызов для однократных заголовков, полученных из запроса, но на стороне сервера не может быть сценарий, который проверяет, существует ли файл на сервере, а затем возвращает JSON, если он существует или нет?

Другие вопросы по тегам