2010-01-02 6 views
0

En essayant de créer un système qui informe l'utilisateur de tout nouveau message privé, la méthode d'index du contrôleur de messages crée des variables d'instance de @messages et @newmessages, les deux sont utilisés dans index.html .erb et je veux faire en sorte que index.js.erb fasse apparaître la boîte de message flash sur mon site.Envoyer une requête Javascript dans les rails

Ive a obtenu jquery pour exécuter une fonction toutes les quelques secondes, la fonction qui est exécutée obtient

function checkagain(){ 
//Start a Timer, dont want it bombarding the server with constant requests 
$.timer(10000,function(){ 
    $.getScript("/messages.js"); 
    //RECURSE, see you again in 10 seconds 
    checkagain(); 
}); 
} 

.getScript $ ne marche pas semblent faire tourner le code sur index.js.erb qui est tout simplement:

alert("RESPONDING"); 

Je n'arrive pas à l'obtenir pour déclencher le code sur cette page.

J'ai trouvé que /messages.js qui ne renvoie pas javascript, la même chose que index.html.erb

l'action index du contrôleur est:

def index 
    @messages = Message.find(:all, :conditions => "receiver_id = '#{current_user.id}' AND `read` = '1'") 
    @newmessages = Message.find(:all, :conditions => "receiver_id = '#{current_user.id}' AND `read` = '0'") 
end 
+1

Hors sujet, mais ce que vous faites là n'est pas récursif. Le commentaire est trompeur. –

+0

il est dans la nouvelle version de cette fonction essentiellement la même chose mais passe un délai plus élevé à l'appel de fonction suivante, puis s'arrête lorsque le délai est supérieur à 10 minutes – Arcath

+0

Le point est que ni checkagain ni la fonction anonyme sont deux fois sur la pile en même temps; par conséquent, il n'y a pas de récursivité. –

Répondre

0

Essayez annexant une chaîne de requête aléatoire pour forcer votre navigateur pour re-télécharger le fichier js:

$.getScript("/messages.js?random=" + Math.random()); 
+0

Jquery semble déjà faire cela, et je ne peux pas utiliser ruby ​​dans le fichier .js – Arcath

0

Pouvez-vous poster un code de l'action de l'index de votre contrôleur de messages? Cela ne semble pas être un problème jquery si messages.js ne renvoie pas le javascript que vous attendez. Avez-vous une vue messages/index.js.erb censée renvoyer cet appel d'alerte, ou avez-vous un fichier messages.js dans votre répertoire public quelque part?

+0

Ajouté le code pour l'action d'index – Arcath

0

Vous pouvez jeter un oeil à Juggernaut qui vous permettra de pousser vers le navigateur client en utilisant une ressource Flash 8.

+0

id plutôt ne pas utiliser flash cause 90% des clients auront juste crash sur eux – Arcath

+0

Utilise également le prototype qui ne va pas travailler avec jQuery – Arcath

Questions connexes