相关疑难解决方法(0)

如何检查jQuery.ajax()请求标头状态是否为"304 Not Modified"?

如何检查jQuery.ajax()请求标头状态是否为"304 Not Modified"?

jqXHR.status通常返回200,即使请求的标题是"304 Not Modified".

ifModified:true 没有太多帮助,因为它破坏了XHR数据请求.

ajax jquery header http-status-code-304

46
推荐指数
1
解决办法
2万
查看次数

正确的方法来处理304未在jQuery ajax中修改

从jQuery 1.5开始,根据XMLHTTPRequest的W3C规范,ajax方法现在可以通过调用success()处理程序正确处理304 Not Modified响应.这允许您的应用程序将请求视为成功,即使服务器实际上没有返回任何数据(因为您已经缓存了最新数据).

对于正常(未缓存)的GET请求,使用以下args调用成功处理程序:

  • data:{来自服务器的数据}
  • 状态:好的
  • jqXHR:
    • 状态:200
    • statusText:好的
    • responseText:{来自服务器的数据}

对于缓存的GET请求,使用以下args调用成功处理程序:

  • 数据:未定义
  • 状态:未修改
  • jqXHR:
    • 状态:304
    • statusText:notmodified
    • responseText:{来自缓存的数据}

(至少,这是在IOS 4.2中返回的方式,对于通过清单文件使用应用程序缓存的Web应用程序.我认为这对于大多数平台/浏览器上的常规浏览器缓存是一致的).

您可以看到,如果请求为200 OK,则仅填充"data"参数; 其中jqXHR.responseText总是填充数据,无论该数据是来自服务器(200 OK)还是来自缓存(304 Not Modified).

鉴于此,在大多数GET请求中,您的成功处理程序将要对您获得的数据执行某些操作,而不管它来自哪里,对于您的成功代码来说,最好总是使用jqXHR.responseText,而不是做这样的事情:

if ("notmodified" === status) {
  // do something with jqXHR.responseText
} else {
  // do something with data
}
Run Code Online (Sandbox Code Playgroud)

或者是否有一种情况,jqXHR.responseText 不会在成功处理程序中填充,但数据arg

我必须通过我的代码库并更改所有成功处理程序(以前我在jQuery 1.4.2上,它总是返回数据,甚至从缓存中返回); 所以我只是想确保我以正确的方式处理它.(不要想达到目的,然后意识到我应该以另一种方式做到这一点).

jquery browser-cache

18
推荐指数
2
解决办法
2万
查看次数