El sondeo AJAX de una URL que devuelve JSON no parece devolver respuestas nuevas (usando el método jQuery $ .ajax ())

StackOverflow https://stackoverflow.com/questions/1412901

Pregunta

Mi proyecto requiere sondear una determinada URL para una respuesta JSON, usando AJAX. La primera solicitud de AJAX que hago alerta al servidor de que quiero algo de contenido JSON, y comienza a generar y almacenar en caché una respuesta, enviándome de vuelta {" status " : " pendiente " } para cada solicitud AJAX posterior hasta que JSON esté listo. En ese momento, la respuesta cambia a JSON que contiene contenido que puedo analizar y mostrar en el documento, lo que quiero hacer tan pronto como la URL devuelva algo que no sea {" estado " : " pendiente " } .

He configurado una función de sondeo que funciona como se espera para solicitar repetidamente JSON desde la URL. Sin embargo, el problema es que continúa obteniendo la respuesta {" status " : " pendiente " } incluso cuando navego directamente a la URL y puedo ver que la respuesta JSON completa está lista y se está sirviendo. Por alguna razón, mi función de sondeo aún obtiene {" status " : " pendiente " } .

Cuando actualizo la página que contiene el código de sondeo, generalmente funciona en la primera solicitud, es decir, obtiene la respuesta completa de JSON. Eso me lleva a creer que es algún tipo de problema de almacenamiento en caché, pero no estoy seguro de dónde o por qué. ¿No debería cada solicitud AJAX obtener una respuesta nueva o esto es algo que puedo configurar en mi llamada $ .ajax () ?

Aquí está el código que estoy usando ahora:

function ajax_poll() {
  $.ajax({
    url: JSON_URL, // JSON_URL is a string containing the URL to poll
    dataType: 'json',
    error: function(xhr_data) {
      display_error();
    },
    success: function(xhr_data) {
      if (xhr_data.status == 'pending') {
        poll++; // increment poll counter // poll is a global variable to track the number of requests made
        if (poll < POLLS) { // POLLS is a global variable to set the maximum number of requests
          setTimeout(function() { ajax_poll(); }, INTERVAL); // wait INTERVAL before another AJAX request
        } else {
          display_error();
        }
      } else {
        success(xhr_data);
      }
    },
    contentType: 'application/json'
  });
}

success () es la función que muestra el contenido JSON (es decir, lo que estoy esperando para que esté disponible durante el sondeo) en la página.

Una cosa que vale la pena mencionar es que, al probar el código localmente, al sondear un archivo de prueba .json local, puedo cambiar el contenido del archivo desde {" estado " : " pendiente " } a una respuesta que contenga contenido como el que estoy buscando, guarde el archivo entre las instancias de sondeo y, en el siguiente sondeo, mi código ve el nuevo contenido y funciona como se esperaba. Simplemente no funciona en el entorno de preparación.

¿Fue útil?

Solución

Puede intentar agregar el " caché: falso " opción .

Otros consejos

Solo para describir una posible razón por la que esto ocurre: probablemente esté emitiendo solicitudes GET AJAX, pero no está diferenciando la URL de ninguna manera (no hay datos adicionales en la cadena de consulta, por ejemplo).

El navegador ve esta solicitud y ni siquiera se molesta en presionar al servidor con la solicitud completa (probablemente emite 304 solicitudes GET condicionales). El resultado final de todo esto es que no está viendo la actividad que espera ver.

Una forma sencilla de resolver este problema es no almacenar en caché los resultados de la solicitud AJAX o enviar una solicitud POST. Las opciones de caché afectadas están cubiertas en las otras publicaciones. El problema con el enfoque POST es que no está ahorrando nada por sus acciones, por lo que está expresando mejor sus intenciones con una solicitud GET.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top