L'appel d'une fonction à l'intérieur de lui-même à l'aide de setTimeout
$(document).ready (
function ready() {
var tester = $.ajax({
async: false,
url: "test_parse.php"
}).responseText;
document.getElementById('test').innerHTML = tester;
setTimeout(ready(), 3000);
}
);
Hé les gars, je veux appeler une fonction à l'intérieur de lui-même comme cela, mais chaque fois que je fais ce que mon navigateur ne cesse de chargement et, éventuellement, Apache s'arrête (évidemment pas mon résultat attendu). Pense que vous les gars pourrait m'aider à trouver une solution? Merci!!!!
Pouvez-vous appeler setTimeout de l'extérieur de la fonction?
aussi je ne pense pas que c'est correct pour mettre des fonctions à l'intérieur de $(document).prêt({});
document.prêt attend une expression de fonction en tant que paramètre, il n'est pas question de savoir si ladite fonction a un nom. (Avant tout les points, je sais qu'une expression de fonction n'est pas la seule option, mais je pense que c'est l'option la plus utilisée.)
Gardez à l'esprit que la fonction nommée expressions ont de nombreux bizarreries et questions qui y sont associés (y compris les bogues de navigateur et même les fuites de mémoire), donc je ferais évitez de les utiliser dans la production de code.
aussi je ne pense pas que c'est correct pour mettre des fonctions à l'intérieur de $(document).prêt({});
document.prêt attend une expression de fonction en tant que paramètre, il n'est pas question de savoir si ladite fonction a un nom. (Avant tout les points, je sais qu'une expression de fonction n'est pas la seule option, mais je pense que c'est l'option la plus utilisée.)
Gardez à l'esprit que la fonction nommée expressions ont de nombreux bizarreries et questions qui y sont associés (y compris les bogues de navigateur et même les fuites de mémoire), donc je ferais évitez de les utiliser dans la production de code.
OriginalL'auteur Vivek | 2011-09-10
Vous devez vous connecter pour publier un commentaire.
setTimeout prend une fonction de référence:
pas
Et cela étant dit, je voudrais aussi faire ceci:
Parce que
async: false
bloque le navigateur jusqu'à ce que les données de retours à partir du serveurasync:false
là pour une raison légitime?peut-être? pouvez-vous citer une bonne raison?
Il semble qu'il veut faire de l'synchrone demande... vous avez un problème avec cela?
href="http://kellegous.com/ecrits/001096" >Il n'y a pas de bonne raison de faire un synchrones demande XHR. 8.4% de cas déclarés IE9 se bloque le mois dernier ont été en raison de synchrone XHR. C'est une mauvaise expérience utilisateur; il n'y a pas de raison que ce que l'OP est en train de faire ne peut être accompli en une
success
fonction de rappel.Pourquoi voudriez-vous mettre de la fonction à l'intérieur de $(document).prêt() ? Pourquoi voudriez-vous utiliser $(document).prêt() au lieu de $(function) {}; ?
OriginalL'auteur Joe
C'est faux:
Ce qui est juste:
ready()
est réellement appeler la fonction.ready
est tout simplement une référence à la fonction, qui est ce que vous voulez.OriginalL'auteur Travis Webb
setTimeout s'attend à une référence de fonction en tant que premier paramètre, vous disposez d'un appel de fonction qui est le passage du résultat de l'appel de prêt().
Ce qui provoque une boucle infinie.
Vous avez besoin pour passer en "prêt", pas "ready()"
Et si vous essayez de file d'attente des requêtes ajax qui se produisent dans un ordre structuré, vous aurez envie de tirer la setTimeout sur le succès après le précédent appel ajax, pas tout de suite, sinon vous aurez ajax résultats de la retourner et de la mise à jour à intervalles arbitraires selon le serveur répond à chaque demande.
C'est mieux que d'utiliser l'async: false, ce qui bloque le navigateur.
OriginalL'auteur Ian Hill
Pourquoi essayez-vous de faire appel à la fonction à l'intérieur de lui-même? Sûrement tout ce que vous devez faire est de déplacer setTimeout à l'extérieur de la fonction, puis d'appeler prêt() à chaque 3000ms? Ce que l voulez-vous votre production?
ready()
appelle lui-même (via le succès de rappel), de sorte que les choses ne recevrez pas sauvegardé si l'un des$.ajax
appels prend trop de temps. J'ai tendance à utiliser cette approche au lieu desetInterval
précisément pour garder les choses bien dans l'ordre et n'ont pas été sauvegardés.OriginalL'auteur lowe_22