# Ruby e ajax

**URL:** <https://www.ruby-forum.com/t/ruby-e-ajax/104958>\
**Category:** IT\
**Created:** [May 24, 2007, 10:49am UTC](https://www.ruby-forum.com/t/ruby-e-ajax/104958 "2007-05-24T10:49:44Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [May 24, 2007, 10:49am UTC](https://www.ruby-forum.com/t/ruby-e-ajax/104958/1 "2007-05-24T10:49:44Z")

</div>

Non riesco a far funzionare ajax richamando uno script cgi scritto in  
ruby, probabilmente il problema sta in qualche banale errore dello  
script poiche’ le funzioni ajax sembrano corrette.  
In ajax passo i parametri utilizzando il metodo send:

xmlHttp.open(“POST”, “/cgi-bin/ruby/accMail1.rb”, true);  
xmlHttp.onreadystatechange = handleStateChange;  
xmlHttp.setRequestHeader(“content-type”,  
“application/x-www-form-urlencoded”)  
xmlHttp.send(  
“uid=” + escape(field[‘uid’]) +  
“&nome=” + escape(field[‘nome’]) +  
“&cognome=” + escape(field[‘cognome’]) +  
“&codice=” + escape(field[‘codice’]) +  
“&password=” + escape(field[‘password’])  
);

lo script cgi e’

#!/usr/bin/ruby -w

require ‘proxy1LDAP’  
require ‘cgi’

cgi = CGI.new  
account = cgi.params

puts “Content-type: text/plain”  
puts

acc=Proxy1LDAP.new  
acc.connetti  
acc.inserisci(account)  
acc.disconnetti

se richamato attraverso la action di una form funziona, ho provato ad  
utilizzare le tecnologie ajax e non funziona.

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [May 24, 2007, 12:25pm UTC](https://www.ruby-forum.com/t/ruby-e-ajax/104958/2 "2007-05-24T12:25:04Z")

</div>

ma l’hai definito da qualche parte la funzione “handleStateChange”?

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [May 29, 2007, 11:51am UTC](https://www.ruby-forum.com/t/ruby-e-ajax/104958/3 "2007-05-29T11:51:28Z")

</div>

Il giorno gio, 24/05/2007 alle 12.23 +0200, david ha scritto:

> ma l’hai definito da qualche parte la funzione “handleStateChange”?

Cavolo in effetti mancava ☹  
Ora funziona solo che non capisco perche’ la responseText non mi ritorna  
niente, sicuramente e’ un problema di script.  
function handleStateChange() {  
if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {  
document.getElementById(“log”).innerHTML = xmlHttp.responseText;  
}  
}

lo script e’

cgi = CGI.new  
account = cgi.params

acc=Proxy1LDAP.new  
acc.connetti  
acc.inserisci(account)  
acc.disconnetti  
cgi.out(“text/plain”) do  
“prova”  
end

la responseText dovrebbe visualizzarmi “prova” nella div.

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [May 30, 2007, 8:40am UTC](https://www.ruby-forum.com/t/ruby-e-ajax/104958/4 "2007-05-30T08:40:31Z")

</div>

Il giorno mar, 29/05/2007 alle 13.19 +0200, David P. ha scritto:

> responseText Ã¨ solo una stringa “piatta” e non puoi usare innerHTML  
> sopra mi sa. Usa responseXML invece; lÃ¬ hai tutto il DOM a disposizione!

Lo script richiamato dalla funzione javascript mi ritorna una semplice  
stringa di testo.  
Ho visto che posso visualizzarla sulla pagina attraverso la responseText  
ma solo se effettuo la chiamata al server in maniera asincrona anziche’  
sincrona.

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [May 29, 2007, 1:20pm UTC](https://www.ruby-forum.com/t/ruby-e-ajax/104958/5 "2007-05-29T13:20:38Z")

</div>

responseText è solo una stringa “piatta” e non puoi usare innerHTML  
sopra mi sa. Usa responseXML invece; lì hai tutto il DOM a disposizione!

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [May 30, 2007, 7:18pm UTC](https://www.ruby-forum.com/t/ruby-e-ajax/104958/6 "2007-05-30T19:18:02Z")

</div>

Mauro S. wrote:

> Il giorno mar, 29/05/2007 alle 13.19 +0200, David P. ha scritto:
> 
> > responseText Ã¨ solo una stringa “piatta” e non puoi usare innerHTML  
> > sopra mi sa. Usa responseXML invece; lÃ¬ hai tutto il DOM a disposizione!
> 
> Lo script richiamato dalla funzione javascript mi ritorna una semplice  
> stringa di testo.

Quindi il tuo script ruby non crea del xml/xhtml valido (o quantomeno  
riconoscibile). Fai il debugging prima di quello: prendi la stringa che  
hai in responseText e usi un validatore qualsiasi che ti dirÃ cosa c’Ã¨  
che manca.

> Ho visto che posso visualizzarla sulla pagina attraverso la responseText  
> ma solo se effettuo la chiamata al server in maniera asincrona anziche’  
> sincrona.

Non c’entra se la chiamata Ã¨ sincrona o asincrona. Ma se la fai  
sincrona, perchÃ© la menata di verificare lo stato? Fai un send e poi  
accedi i dati direttamente (ovviamente lo script si ferma mentre carica  
i dati e non Ã¨ sempre bello, ma il codice Ã¨ piÃ¹ semplice).
