8
votes

Comment recharger JSON avec AJAX toutes les 10 secondes

J'essaie de recharger un fichier JSON toutes les 10 secondes avec jQuery.

La page est ici: http://moemonty.com/chirp/chirp.html

Le code est ici: xxx

Il ne semble pas travailler.


3 commentaires

ne semble pas fonctionner n'est pas une description de problème très précis. Quel est le résultat attendu, quel est le résultat réel (message d'erreur, code d'état HTTP)?


Bien ce que fait se produit?


De plus, même si le code de délai d'expiration fonctionnait, je ne pense pas que tous ces document.write feront ce que vous voulez qu'ils fassent.


4 Réponses :


3
votes

Je m'attendrais à ce que la boucle fonctionne comme citée, mais il pourrait y avoir une subtilité autour du fait que vous utilisez JSONP. Je changerais le settimeout appeler à: xxx

... pour quelques raisons. Tout d'abord, à l'aide de la référence de fonction plutôt que d'une chaîne de code est une meilleure idée en général, et le second éteint, vous êtes tout à fait certain que vous obtenez la bonne référence de fonction (alors que la chaîne que vous obtenez dépend du contexte dans lequel le code est exécuté).

mais comme point de signalé dans un commentaire, il y a un problème distinct: document.write ne fera probablement pas ce que vous voulez probablement . Vous ne pouvez utiliser que document.write pour écrire sur le flux HTML qui est analysé dans le cadre de la charge de la page d'origine. Après la charge de la page, vous ne pouvez plus l'utiliser. Pensez à utiliser JQuery's Ajoutez ou APPENDTO et des fonctions similaires à ajouter à la charge de la page DOM.


0 commentaires

0
votes

Vous avez une erreur dans console.log (data.query.results.json); - console n'est pas défini. De plus, vous pouvez utiliser setingerval ("fonction ()", 5000); .


2 commentaires

console sera défini sur beaucoup de navigateurs (Firefox, Chrome, ...) et non sur IE. Je suppose que s'il l'utilise, il utilise un navigateur où il est soutenu.


Juste pour être plus précis, si vous utilisez seinterval, appelez-le sur le document prêt, pas à l'intérieur de la fonction elle-même.



12
votes

Vous voulez probablement que l'ensemble précédent des données retournées remplacées par le nouvel ensemble, au lieu de l'ajouter. Dans ce cas, utiliser jQuery, vous pouvez faire: xxx

etc ...


4 commentaires

Bonne réponse, mais settimeout ("loadchirp ()", 5000); devrait être Settimeout (Loadchirp, 5000); Il n'est presque jamais approprié de transmettre une chaîne dans Settimeout ou seinterval .


La question était de recharger toutes les 10 secondes, de sorte que cela devrait être: setInterval (Loadchirp, 10000);


Devrait être SettimeOut (Loadchirp, 10000); sans () ou "" sur la fonction Loadchirp. Appeler la fonction avec exécution "()" devrait libérer une récursion horrible.


Est-ce considéré comme une chose chère à faire ou à la normale? J'ai une situation similaire dans laquelle j'ai besoin de mettre à jour une table lorsqu'un bouton de lecture est enfoncé et il doit continuer à obtenir les données de l'API jusqu'à ce que le bouton STOP soit enfoncé (c'est-à-dire s'il y a de nouvelles données sur le Web. service).



0
votes

Vous devez absolument utiliser:

setInterval ("Loadchirp", 10000):

N'écrivez pas LoadCrirp () à l'intérieur de seinterval car nous ne faisant que passer une réfrence


1 commentaires

"N'écrivez pas LoadCrirp () à l'intérieur de seinterval car nous ne faisons que passer une réfrence" alors pourquoi votre exemple passe-t-il toujours une chaîne? Vous devez supprimer les citations pour transmettre une référence à la fonction; Sinon, seinterval évaluera la chaîne, qui n'aura aucun effet (il n'appellera pas la fonction, par exemple).