Forma correcta de manejar 304 no modificado en jQuery ajax

A partir de jQuery 1.5, los métodos ajax ahora manejan correctamente las respuestas 304 no modificadas llamando al manejador success (), según la especificación W3C para XMLHTTPRequest. Esto permite que su aplicación trate la solicitud como exitosa, incluso si el servidor no devolvió ningún dato (porque ya tiene los últimos datos en caché).

Para una solicitud GET normal (sin caché), se llama al controlador de éxito con los siguientes argumentos:

data: {los datos del servidor}status: OKjqXHR:status: 200statusText: OKresponseText: {los datos del servidor}

Para una solicitud GET en caché, se llama al controlador de éxito con los siguientes argumentos:

data: indefinidostatus: notmodifiedjqXHR:status: 304statusText: notmodifiedresponseText: {los datos del caché}

(al menos, así es como se devuelve en IOS 4.2, para una aplicación web que usa el caché de la aplicación a través de un archivo de manifiesto. Supongo que esto es consistente para el almacenamiento en caché general del navegador en la mayoría de las plataformas / navegadores).

Puede ver que el argumento "datos" solo se completa si la solicitud fue 200 OK; donde jqXHR.responseText siempre se rellena con datos, independientemente de si esos datos provienen del servidor (200 OK) o de la memoria caché (304 no modificado).

Dado que, en la mayoría de las solicitudes GET, su controlador de éxito va a querer hacer algo con los datos que obtuvo, independientemente de su procedencia, parece tener más sentido que su código de éxito siempre use jqXHR.responseText , en lugar de hacer algo como esto:

if ("notmodified" === status) {
  // do something with jqXHR.responseText
} else {
  // do something with data
}

O alguna vez hay un caso cuando jqXHR.responseText no se completará en el controlador de éxito, pero los datos argharí?

Tengo que revisar mi base de código y cambiar todos los controladores de éxito (anteriormente estaba en jQuery 1.4.2, que siempre devolvía datos, incluso desde el caché); así que solo quiero asegurarme de que lo estoy manejando de la manera correcta. (No quiero llegar al final y luego darme cuenta de que debería haberlo hecho de otra manera).

Respuestas a la pregunta(2)

Su respuesta a la pregunta