如何使用jQuery.ajax仅获取状态码而不下载整个文档?

3
我有一个应用程序,正在使用jQuery.ajax轮询资源以查找其是否存在。 (后台有一个服务在生成该资源)。 当资源不再给出404状态时,我的应用将重定向到该资源以进行查看。 我的问题是……我能否在不下载整个文档的情况下获取状态? 如果它轮询的PDF非常大,我担心仅通过jquery获得200状态并下载文档,然后将其丢弃并重定向到相关文档会很低效。
这是我的操作(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个回答

3
您无法仅获得状态码,但可以仅请求HTTP标头。
使用HEAD方法。然后,您可以检查jqXHR对象的状态。
jQuery.ajax("/", { type: "HEAD"}).done(
    function (data, textStatus, jqXHR) {
        console.log(jqXHR.status);
    }
);

嗯,我喜欢这个想法,但是 jQuery.ajax 文档说:“要发出的请求类型(“POST”或“GET”),默认为“GET”。注意:其他HTTP请求方法,如PUT和DELETE,在此处也可以使用,但并非所有浏览器都支持。”在此处使用“HEAD”时,浏览器支持情况如何? - nzifnab
1
维基百科(http://en.wikipedia.org/wiki/XMLHttpRequest#History_and_support)表示*支持IE7及以上版本*。 - Guillaume Poussel
是的,这对我来说似乎很好用 :) 我正在向Amazon S3发出请求,因此我必须在我的CORS配置中启用HEAD方法,并使用签名的HEAD URL而不是我之前使用的签名GET URL。虽然工作得很好! - nzifnab

0

我找不到任何一次请求头接收的回调函数,但是在服务器端,您可以编写一个脚本来检查文件是否存在于服务器上,如果存在则返回JSON,否则返回其他内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接