2008-09-24 4 views
0

J'utilise ce qui suit dans la page Web, mais ne peut pas obtenir une réponse du serveur alors qu'il est le traitementSurveillance d'un processus côté serveur sur l'application Rails en utilisant AJAX XMLHttpRequest

<script type="text/javascript"> 
<!-- 
    function updateProgress() { 
     //alert('Hello'); 
     new Ajax.Request('/fmfiles/progress_monitor', { 
     parameters: 'authenticity_token=' + encodeURIComponent(AUTH_TOKEN), 
     onSuccess: function(response) { 
      alert(response.responseText); 
      fillProgress('progressBar',response.responseText); 
     } 
     }); 
    } 
//--> 
</script> 

<% form_for(:fmfile, :url => '/fmfiles', :html => { :method => :post, :name => 'Form_Import', :enctype => 'multipart/form-data' }) do |f| %> 
... 
<%= f.file_field :document, :accept => 'text/xml', :name => 'fmfile_document' %> 
<%= submit_tag 'Import', :onClick => "setInterval('updateProgress()', 2000);" %> 

La méthode « créer » dans fmfiles_controller.rb alors heureusement traite le dossier et obtient les bons résultats (selon le bouton de soumission sur le formulaire). Si je décommente la ligne '// alert (' Bonjour '), je reçois une boîte de dialogue disant Bonjour toutes les 2 secondes ... comme prévu.

Cependant, le serveur n'enregistre jamais un appel à la méthode 'progress_monitor' dans 'fichiers', même pas une tentative échouée.

Si je clique sur le lien

<a href="#" onclick="updateProgress();">Run</a> 

il fait un appel au serveur, obtient une réponse et affiche la boîte de dialogue, donc je suppose que les routes et la syntaxe et la désignation est tout OK. Je ne sais vraiment pas pourquoi cela ne fonctionne pas. Est-ce parce que 2 méthodes d'un même contrôleur sont appelées via des URL?

J'utilise Rails 2.1.0 dans un environnement de développement sur OS X 10.5.5 et Safari 3.1.2 en utilisant

(NB Ceci fait suite à une autre question, mais je pense qu'il est suffisamment différent pour mériter son sa propre question.)

Répondre

2

Si vous ne voyez pas de messages dans votre fichier journal pour l'appel de 'progress_monitor', il est possible que la requête ne soit jamais envoyée.

Essayez ceci:

  1. Essayez d'utiliser l'URL complète au lieu de l'URL relative pour la Ajax.Request. J'ai eu des problèmes avec les URL relatives sur certains navigateurs avec l'Ajax.Request.

  2. Activez Firebug ou la barre d'outils du développeur IE. Vous devriez être en mesure de voir si l'appel à progress_monitor fonctionne ou non. S'il y a une erreur de script Java, vous verrez clairement l'erreur en utilisant ces outils.

+0

1. J'ai essayé, mais l'URL utilise GET, je dois utiliser POST pour l'appel à la méthode, donc je reçois juste un contrôleur d'action Exception –

+0

2. Dans l'installation Firebug (honte de dire que je havre de paix » Je l'ai utilisé) J'ai essayé la demande dans Firefox, ça marche! Je pense que c'est un bug Safari, je vais le google et ajouter une réponse si je trouve quelque chose. –