Houlà, ça m'a l'air un peu emmêlé tout ça, mais au moins ça fait plaisir
d'avoir quelqu'un qui pose une question avec des informations précises et
des bouts de code.

Déjà, en regardant ton bout de code JavaScript, une question me saute au
neurone : pourquoi faire du JavaScript hardcore comme ça ? Ce serait plus
simple en utilisant un bon petit framework (si tu ne veux pas trop
t'éloigner de Rails : prototype ; sinon je te recommande le bien meilleur et
plus simple jQuery). Utiliser une framework t'évitera de tomber dans les
nombreux nids-de-poule que l'AJAX réserve au débutant, et accroîtra ta
productivité.

Par exemple, essayons de traduire le bout de code JavaScript que tu nous a
posé là en jQuery :
function sendQ() {
  var selected = $('#f').value() // récupère le select dont l'id est "f" et
lit la valeur sélectionnée
  $('#bj').load('/diet', { 'ou': selected }); // fait une requête AJAX vers
l'url /diet en méthode get avec la valeur selected dans le paramètre 'où' et
injecte le résultat dans l'élément dont l'id est 'bj'
}

Ca peut aussi marcher avec prototype mais c'est plus compliqué à écrire.
Pour toute information sur jQuery : http://jquery.com/ (oh surprise)

Généralement les problèmes AJAX proviennent de :

   - JavaScript mal écrit (très probable) - utiliser de bons outils (Firefox
   avec Firebug) pour les résoudre à posteriori, utiliser de bons outils
   (jQuery, prototype, mootools, etc.) pour les éviter à priori
   - CSS mal écrite (probable) - utiliser de bons outils (Firefox avec
   Firebug) pour les résoudre à posteriori, ne pas promettre la lune pour ne
   pas se faire piéger par l'incompatibilité des navigateurs (Internet
   Explorer)
   - problème côté serveur (moins probable) - vérifier que l'on a pas oublié
   un respond_to ou une vue spécifique, ou si on a oublié de zapper le layout

Sinon je vais jeter un coup d'oeil plus précis sur ton code pendant la
soirée, voir si je vois un autre problème que JavaScript.

Michel Belleville


2009/9/24 Emma Nemo <[email protected]>

>
> #~ S.O.S AJAX/GET/CONTROLLER/CASE/ETC/ = ok mais pas > ça
>
> Bonjour, je me pseudomme zepo, je suis une fille, je débute et j'ai
> besoin de votre aide
> Je me prends la tête sur une opération. C'est une petit test pour que je
> comprenne bien comment fonctionne MVC/AJAX
>
> J'ai débuté Ruby sérieusement il y a une semaine comme ça ou deux, car
> je dors plus :-)
>
> Voici le contexte de mon problème: Je ne comprends pas la chose la plus
> basique qui soit.
> J'ai simulé l'arrivée de mon url dans mon controller pour tester mon
> ajax une url,
>    en la construisant, bien que j'aurais pu la mettre directement dans
> URI() ou parse etc.
> Je sais pas comment expliquer.
>
> Le model Lifestyle n'est pas en relation avec ActiveRecord pour m'éviter
> quelques contraintes durant le test
> L'action est diet.erb appelée par une fonction javascript qui le show
> dans le _my_diet dans une span
> La vue est layout application.rhtml#lifestyle#index.erb, elle rend un
> partial _my_diet.erb
>
> Le truc c'est que j'ai le mauvais sentiment d'avoir tout fait à l'enver
> et je ne comprends pas, malgrés la doc, car j'ai beaucoup de mal avec
> les markup,
>
> Comment diable mon GET et cette *** d'url qui arrive en header,que je
> vois en live avec LiveHTTP Header, je la fait venir dans mon code pour
> de vrai en live ??
> vu que mon case fonctionne, mon ajax aussi, tout fonctionne mais pas
> quand je me dis c'est le moment de faire venir cette *** url dans la
> zone
> ou est h dans mon essai bah je trouve pas, je trouve pas comment faire
> quelle methode ...
>
> Je comprends pas qui request qui dans mon histoire..... et qui lit qui.
>
> HELP :-)
>
> _my_diet ( pas encore avec FormHelper ou FormTagHelper )
> <form id="f" action="">
>  <p>
>    <select name="regime" onmouseup="sendQ()">
>      <option>Vegetarien</option>
>      <option>Vegetalien</option>
>      <option>Canibale ...</option>
>    </select>
>    <span id="bj"></span>
>  </p>
> </form>
>
> le javascript
> ...
> oa = new Oajax();
> o = oa.createOajax();
>
> function sendQ(){
>  for( i=1 ; i<=3 ; i++ ){
>    if( this.document.getElementById("f").regime.options[i - 1].selected
> ){
>      this.o.open('get', 'diet?ou='+i, true);
>      this.o.onreadystatechange = helpQ;
>      this.o.send(null);
>    }
>  }
> }
> function helpQ(){
>    if (o.readyState == 4){ document.getElementById("bj").innerHTML =
> o.responseText; }
>  }
>
> le ruby
>
> #~ fxri irb:session:1
> #~ first:part:paste
> require 'uri'
> require 'net/http'
>
> #~ model test
> class Lifestyle
>  @@diets = { :veran => 'vegetarian', :vegan => 'vegetalian', :cani =>
> 'cannibal' }
>
>  def initialize(style = :style)
>    @style = style
>  end
>
>  def diet
>    @@die...@style]
>  end
> end
> #~ => nil
>
>
> #~ second part:paste
> #~ :controller => 'lifestyle', => :action 'diet'
>
> h = URI::HTTP.build(:scheme => 'http', :host=> 'localhost', :port =>
> '3000', :path => '/lifestyle/diet', :query => 'ou=2')
>                            #~ => #<URI::HTTP:0x62e916c
> URL:http://localhost:3000/lifestyle/diet?ou=2>
>
> @s = URI("#{h}").query.slice(3,2)
>                            #~ => "2"
>                            #~ variant @s =
> URI.split("#{h}")[7].slice(3,2)
>
>  case @s  #~ => "2"
>    when 1.to_s     #~ /\w*[ou]?[0-1]$/
>      @diet = Lifestyle.new(:veran).diet
>    when 2.to_s     #~ /\w*[ou]?[1-2]$/
>      @diet = Lifestyle.new(:vegan).diet
>    when 3.to_s     #~ /\w*[ou]?[2-3]$/
>      @diet = Lifestyle.new(:cani).diet
>    else
>      @diet = "Tripple fok"
>    end                #~ => in this case "vegetalian"
>
>    @diet + @s     #~ => "vegetalian2" temporary help me to see the @s
> value in the .erb -> vegetalian 2
> #~ end controller
>
>    h  #~ => #<URI::HTTP:0x630eb24
> URL:http://localhost:3000/lifestyle/diet?ou=2>
>    @diet #~ => "vegetalian"
>    @s #~ => "2"
>
> --
> Posted via http://www.ruby-forum.com/.
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse 
[email protected]
-~----------~----~----~----~------~----~------~--~---

Répondre à