2010-01-06 5 views
10

J'essaye d'utiliser jQuery, et tout a été génial, jusqu'à présent, quand j'essaye de rendre un partiel et de l'ajouter à un div. Voici comment je l'ai mis en place:Rails, jQuery, fichiers .js.erb, JS non exécutés par le navigateur

J'ai une action qui répond à js:

def index 
    @objects = Object.find(:all) 

    respond_to do |format| 
    format.js 
    end 
end 

Et un modèle appelé index.js.erb avec javascript dans ce:

alert("hello world"); 

Firebug renvoie un « text/javascript » réponse contenant:

alert("hello world"); 

Mais la fenêtre d'alerte ne semble pas, ni fait un ny autre travail JavaScript. J'ai vérifié http://railscasts.com/episodes/136-jquery Et suis plus ou moins suivant. J'ai essayé plusieurs autres choses, comme l'utilisation de .rjs au lieu de .erb et de mettre cela dans mon modèle:

page.alert("hello world"); 

mais je reçois exactement le même résultat, et le navigateur exécute jamais JS.

Quelqu'un sait pourquoi le JavaScript n'est pas en cours d'exécution?

Je Rails en cours d'exécution 2.3.4.

+1

Vous ne semble pas être quoi que ce soit en utilisant jQuery spécifique, mais comme une note, Rails est livré avec Prototype, non jQuery. Jetez un coup d'œil sur jRails si vous voulez changer. –

Répondre

12

Vous devez appeler à partir de votre point de vue ou il ne sera jamais exécuté.

un contrôleur exemple:

def index 
    @objects = Object.find(:all) 

    respond_to do |format| 
    format.js{ 
     render :text => "alert('hello')" 
    } 
    end 
end 

et un index.html.erb avec:

<script type="text/javascript"> 
    $(function(){ 
    $.ajax({ url: '/controller', type: 'get', dataType:'script' }); 
    }); 
</script> 

remplacer '/ contrôleur' ​​avec l'URL qui exécute l'action d'index de ce contrôleur, par défaut pour PostsController il sera '/ posts' et ainsi de suite ...

Si vous aimez les rjs vous supprimez le {} et y avalez dans le contrôleur et créez un index.js.erb ou index.rjs avec:

page.alert("hello world") 

ou:

page << "hello world" 
+0

Dans ma situation, je n'ai pas de version html de cette action, c'est strictement pour charger les pages via ajax (pagination infinie). Pour une raison quelconque, même lorsque j'appelle render: text => "alert ('hello');" Dans mon bloc response_to, je ne reçois toujours pas d'alerte, mais firebug dit que je reçois une réponse texte/javascript avec le contenu correct. – a10s

+4

Eh bien. Il se trouve que j'ai oublié dataType: 'script' dans mon appel ajax. Merci pour votre aide, je n'aurais pas attrapé celui-là par moi-même. – a10s

+0

dataType: 'script' m'a également sauvé lors de l'utilisation du plugin jQuery Form. Une fois la configuration de js.erb correctement effectuée, elle ne fonctionnera pas en JavaScript sans elle. Merci! – brokenbeatnik

Questions connexes