Je suis un novice à intermédiaire JavaScript/jQuery programmeur, afin de béton/exécutable exemples serait très apprécié.
Mon projet nécessite l'utilisation d'AJAX pour interroger une URL qui renvoie du JSON contenant soit de l'ajout de contenu pour les DOM, ou un message { "status" : "en attente" } qui indique que le backend est encore à travailler sur la génération d'une réponse JSON avec le contenu. L'idée est que la première demande à l'URL déclenche le backend de commencer à construire une réponse JSON (qui est alors mis en cache) et à la suite des appels de vérifier pour voir si ce JSON est prêt (dans ce cas, il est fourni).
Dans mon script, j'ai besoin d'interroger cette URL à 15 secondes d'intervalle jusqu'à 1:30 min., et effectuez les opérations suivantes:
- Si la requête AJAX entraîne une erreur, arrêter le script.
- Si la requête AJAX résultats de succès, et le contenu JSON contient { "status" : "en attente" }, continuer d'interrogation.
- Si la requête AJAX résultats de succès, et le contenu JSON contient utilisable contenu (c'est à dire pour être valable, toute réponse autre que { "status" : "en attente" }), puis afficher ce contenu, arrêtez d'interrogation et de terminer le script.
J'ai tenté quelques approches avec un succès limité, mais j'ai l'impression qu'ils sont tous messier qu'ils doivent l'être. Voici un squelette de fonction que j'ai utilisé avec succès pour faire une requête AJAX à la fois, qui fait son travail si je reçois utilisable contenu de la réponse 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'
});
}
Cependant, cette fonction ne fait rien, sauf s'il reçoit une réponse JSON valide contenant utilisable de contenu.
Je ne suis pas sûr de quoi faire sur les lignes qui sont juste des commentaires. Je soupçonne qu'une autre fonction est de gérer le bureau de vote, et de l'appel ajax_
demande (), mais je ne sais pas la façon la plus élégante pour l'ajax_
request() de communiquer ses résultats à l'interrogation de la fonction de sorte qu'il peut réagir de façon appropriée.
Toute aide est grandement appréciée! S'il vous plaît laissez-moi savoir si je peux fournir plus d'informations. Merci!