2009-07-01 7 views
2

Vous rencontrez des problèmes pour que cela fonctionne, en particulier avec $ .getJSON(). Je veux envelopper la fonction getJSON de jQuery dans une fonction Javascript comme ceci:Appel de la fonction jQuery avec la fonction Javascript

function reload_data() { 
    $.getJSON("data/source", function(data) { 
     $.d = data; 
    }); 
} 

Mais quand je l'appelle reload_data() il n'exécute pas la fonction jQuery à l'intérieur. Des idées?

+0

Comment savez-vous qu'il n'exécute pas la fonction? Avez-vous mis un point d'arrêt sur la ligne à l'intérieur pour vérifier? – Nosredna

+0

Il s'exécute très bien. Je suppose que les données de la variable $ .d ne doivent pas être rafraîchies de telle sorte que le reste du script puisse l'utiliser. – mcmaloney

+0

Vous ne nous montrez pas assez de l'image pour donner une réponse précise. –

Répondre

2

Mettez une alerte à côté de la fonction pour connaître son appel.

et une prise d'essai autour de l'appel jQuery pour voir s'il y a une erreur

function reload_data() { 
    alert('reload_data start'); 
    try{ 
     $.getJSON("data/source", function(data) { 
      $.d = data; 
     }); 
    } 
    catch (ex){ 
     alert ('error in jQuery call:' + ex) 
    } 
} 
3

Vous ne nous dit pas assez. Je vais juste deviner!

Si vous appelez cette fonction, puis de vérifier immédiatement .d $ pour les résultats, qui ne va pas travailler parce que vous ne laissez pas le temps de la demande asynchrone AJAX pour terminer ...

reload_data(); 
alert($.d); // What?! It's not displaying the updated results?! 

Vous devez utiliser une structure de rappel, comme jQuery utilise, pour le faire fonctionner ...

reload_data(function() { 
    alert($.d); 
}); 

function reload_data(func) { 
    $.getJSON("data/source", function(data) { 
    $.d = data; 
    //Execute the callback, now that this functions job is done 
    if(func) 
     func(); 
    }); 
} 
+0

Oui, c'était aussi ma réponse. C'est pourquoi j'ai demandé s'il était sûr que la fonction ne serait pas appelée. Après tout, Ajax est asynchrone. – Nosredna

+0

Cela soulève un point intéressant. Je pense qu'il pourrait changer sa demande pour être synchrone et cela pourrait régler le problème, bien que je ne pense pas que ce soit la meilleure solution, alors je vais laisser ma réponse telle quelle. –

+0

De toute façon, il va devoir attendre que l'ajax soit exécuté avant de pouvoir faire quoi que ce soit avec la variable. Je pense (mais je ne suis pas sûr) que l'interface utilisateur du navigateur sera plus réactive si l'appel est laissé asynchrone. – Nosredna

0

Merci pour l'aide tout le monde, mais la solution était en fait très simple. C'était juste une question de synchronisation. La page était en train de recharger avant que les données JSON ne soient rechargées, c'est pourquoi je ne voyais pas d'erreur.

Questions connexes