Newsgroup: it.comp.lang.javascript
Titolo: XMLHttpRequest() e open multipli

Salve,
ho provato a richiamare più volte .open() e .send() di XMLHttpRequest() ma
senza successo.
In pratica una volta inizializzato l'oggetto con:
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = processRequestChange;
xmlhttp.open('GET', URL, true);
xmlhttp.send(null);
ed ottenuto la pagina (indirizzo nella variabile URL), provo a richiamare
con lo stesso oggetto xmlhttp un'altra pagina con le istruzioni sufficienti
e cioé:
xmlhttp.open('GET', URL, true);
xmlhttp.send(null);
senza ovviamente onreadystatechange, un evento che è già stato correttamente
assegnato.
Questo richiamo di istruzioni non genera errori (oltre che nulla).
Bisogna re-inizializzare XMLHttpRequest()?
Da notare che avviene la stessa cosa con IE e il relativo ActiveX.
Thanks,
Max

 Bisogna re-inizializzare XMLHttpRequest()?
Bisogna re-assegnare la callback, essa viene deallocata a richiesta
completata.
-- 
ZER0
~ Legge dell'Amplificazione sonora
Nello spazio i rumori delle esplosioni si trasmettono ancora meglio perché
non c'è l'aria a trattenerli.(La Fisica nei Cartoni)

  
Visto che mi sto impratichendo anche io con questo oggetto.. la butto li'...
se devi fare chiamate successive non e' meglio farle sincrone?
Con
xmlhttp.open('GET', URL, true);
Fai una chiamata asincrona (per la sincrona devi mettere false al posto di 
true)... quindi il flusso dello script non viene bloccato in attesa di risposta 
dal server e quindi se dopo c'e' un'altra open... non so bene cosa possa 
succedere ma credo che non gli faccia molto piacere...
Quindi... o crei un altro oggetto o le fai sincrone le chiamate, pero' se le fai 
sincrone corri il rischio che se il server e' particolarmente lento e se stai 
facendo una pagina web per internet il tutto sia da quaresima...
Viandante

 se devi fare chiamate successive non e' meglio farle sincrone?
Non credo che intendesse chiamate "sequenziali", bensì "diverse chiamate
eseguite dal medesimo oggetto, in tempi diversi".
Ovvero, laddove hai già un oggetto XmlHttpRequest, non stai a instanziarne
un altro, ma tendi a riutilizzarlo quando ce n'è bisogno.
-- 
ZER0
~ Legge della Gravità Differenziata
Ogni volta che qualcosa o qualcuno salta, è lanciato, o comunque se ne va
in aria, la gravità viene ridotta di un fattore 4.(La Fisica nei Cartoni)

 
si certo, io lo istanzio una volta e lo uso in 3-4 funzioni....

 un altro, ma tendi a riutilizzarlo quando ce n'è bisogno.
Esattamente. Ora ho risolto i problemini con Firefox (e con chi sennò?) per
microerrori di codice... ma con quella chiavica di IE il problema sussiste,
anche assegnando di nuovo onreadystatechange o mettendo le chiamate in
sincrone... :-/

 sincrone... :-/
Significa che hai altri errori di codice altrove. Non mettere le chiamate
sincrone se non ti servono, ricorda ad esempio che con chiamate sincrone
gecko ignora bellamente l'onreadystatechange, mentre IE dovrebbe ugualmente
chiamarlo a fine processo.
Attento quindi a non confondere le due cose.
Se utilizzi chiamate sincrone, il problema non sussiste perché cambi logica
(non hai onreadyonstatechange), quindi non capisco come faccia ad esistere
ancora.. dovresti specificare meglio.
Se invece reassegni la callback dovrebbe funzionarti, ovviamente se non vi
sono altri errori che ne impediscono la corretta esecuzione.
Prova a illustrare meglio l'intero codice del contesto, o se non possibile,
cerca di debuggarlo autonomamente mettendo qualche opportuno alert().
-- 
ZER0
~ Legge del Riconoscimento debole.
Mettersi un costume, anche senza maschera, è più che sufficiente per
diventare del tutto irriconoscibile anche ai parenti e agli amici più
stretti.(La Fisica nei Cartoni)

 sincrone se non ti servono...
Era solo una prova "tanto per"... in questa materia così enigmatica dei
browser...
Ho dovuto riassegnare l'onreadystatechange e ovviamente la chiamata sincrona
non mi serve affatto...
Però intanto IE non mi genera alcun errore. Se re-istanzio Microsoft.XMLHTTP
ovviamente funziona: quindi il condice successivo è "pulito".
In pratica nella seconda funzione (quella che reutilizza l'instanza) non
faccio altro che vedere se la variabile xmlhttp (in cui istanzio
l'XMLHTTPRequest o l'activeX) è "qualcosa" con:
if (xmlhttp) {
    xmlhttp.onreadystatechange = processRequestChange;
    xmlhttp.open('GET', URL, true);
    xmlhttp.send(null);
}
Sbaglio qui? Con Mozillone funziona :)

 }
Prova a fare prima la open, e poi ad assegnare l'onreadystatechange.
Se anche così non dovesse andare, devo vedere il codice nella sua
interezza, così decontestualizzato non aiuta.
-- 
ZER0
~ Legge dell'Inadeguatezza Militare, Corollario
Se un solo robot o astronave combatte contro un intero esercito, l'esercito
perde.(La Fisica nei Cartoni)

 Prova a fare prima la open, e poi ad assegnare l'onreadystatechange.
Olé ora funge. Come mai questa differenza????
Grazie molte,
Max

 Grazie molte,
De nada.
-- 
ZER0 "che ieri ha visto dal vivo Avril"
~ Legge del Clamore Evocativo
Il danno provocato da un attacco di arti marziali è direttamente
proporzionale al volume con cui viene annunciato. (La Fisica nei Cartoni)

 Olé ora funge. Come mai questa differenza????
Tra Mozilla e IE? Fossero solo queste le differenze. E' semplicemente una
differenza implementativa. L'XmlHttpRequest è stato creato sulla base
dell'ActiveX della Microsoft, e quindi ne ricalca buona parte dei
comportamenti; ma non tutti.
Il metodo "open" serve per inizializzare una richiesta.
L'onreadystatechange ed il send sono subordinati ad una richiesta; quindi
se prima non la inizializzi nessuno dei due avrebbe senso.


 ZER0 "che ieri ha visto dal vivo Avril"
NOOOOOOOOOOOOOO!!!!! TI ODIO!! :))
-- 
E' stata una fortuna che tu sia nata alla fine degli anni '70.
Fossi nata piu' tardi avresti le orecchie sforacchiate e tutta
una serie di anelli in posti che adesso non posso dirti.

 NOOOOOOOOOOOOOO!!!!! TI ODIO!! :))
gné gné gné.. eppure aggratis.. :P Avril la seguo da quando era una
fanciullina (oddio, non che ora..), non potevo perdermi l'occasione. ^_^
-- 
ZER0 
~ ..ma in effetti il concetto di WYSYWYG (quello che vedi e' quello che
ottieni) si applica ai computer malissimo, cosi' come si applica alle
donne... (The Real Programmer)

 fanciullina (oddio, non che ora..), non potevo perdermi l'occasione. ^_^
beh, per il momento mi consolo con la dedica di Elaine Cassidy... ;)
