jQuery AJAX polling para respuesta JSON, manejo basado en el resultado AJAX o contenido JSON

Soy un programador de JavaScript / jQuery de principiante a intermedio, por lo que los ejemplos concretos / ejecutables serían muy apreciados.

Mi proyecto requiere usar AJAX para sondear una URL que devuelva JSON que contenga el contenido que se agregará al DOM o un mensaje{ "Estado: Pendiente" } eso indica que el backend todavía está trabajando en generar una respuesta JSON con el contenido. La idea es que la primera solicitud a la URL active el backend para comenzar a crear una respuesta JSON (que luego se almacena en caché), y las llamadas posteriores verifican si este JSON está listo (en cuyo caso se proporciona).

En mi script, necesito sondear esta URL a intervalos de 15 segundos hasta 1:30 minutos, y hacer lo siguiente:

Si la solicitud AJAX produce un error, finalice el script.Si la solicitud AJAX resulta exitosa y el contenido JSON contiene{ "Estado: Pendiente" }, continúa el sondeo.Si la solicitud AJAX resulta exitosa y el contenido JSON contiene contenido utilizable (es decir, cualquier respuesta válida que no sea{ "Estado: Pendiente" }), luego muestra ese contenido, deja de sondear y termina la secuencia de comandos.

He intentado algunos enfoques con éxito limitado, pero tengo la sensación de que todos están más sucios de lo que necesitan. Aquí hay una función esquelética que he usado con éxito para hacer una sola solicitud AJAX a la vez, lo que hace su trabajo si obtengo contenido utilizable de la respuesta JSON:

// make the AJAX request
function ajax_request() {
  $.ajax({
    url: JSON_URL, // JSON_URL is a global variable
    dataType: 'json',
    error: function(xhr_data) {
      // terminate the script
    },
    success: function(xhr_data) {
      if (xhr_data.status == 'pending') {
        // continue polling
      } else {
        success(xhr_data);
      }
    },
    contentType: 'application/json'
  });
}

Sin embargo, esta función actualmente no hace nada a menos que reciba una respuesta JSON válida que contenga contenido utilizable.

No estoy seguro de qué hacer en las líneas que son solo comentarios. Sospecho que otra función debería manejar el sondeo, y llamar a ajax_solicite () según sea necesario, pero no conozco la forma más elegante de ajax_request () para comunicar sus resultados a la función de sondeo para que pueda responder adecuadamente.

¡Cualquier ayuda es muy apreciada! Por favor, hágamelo saber si puedo proporcionar más información. ¡Gracias!

Respuestas a la pregunta(4)

Su respuesta a la pregunta