Ruby e ajax

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.

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

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 :frowning:
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.

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.

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

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).