Newsgroup: it.comp.lang.javascript
Titolo: managestatechange e visibilità del metodo

Allora non riesco a venire fuori da questo problemino.
Ho creato un oggetto, ho definito i metodi con prototype. Uno di questi
metodi serve per collegarsi ad una url remota e poi gestire il risultato.
Per il remoting uso XMLHTTPRequest()  che ha la proprità readyState per
sapere a che punto siamo, se ha mandato i dati, se li ha ricevuti etc. Da
quello che ho capito per gestirla bisogna attaccare un evento all'oggetto
in modo che siano sempre notificati i vari cambiamenti di stato.
Detto questo, il mio problema è che da dentro il metodo che gestisce lo
stato non riesco più a vedere gli altri metodi del mio oggetto. Come si fa?
Segue breve codice con commenti.
Amaz.prototype.callAmazon = function() {
 
	//Create q String
	var q = this.targetUrl + bla bla
	//Call Amazon	
	req = new XMLHttpRequest();
	req.overrideMimeType("text/xml");
	req.open("GET",q,true);
	req.send(null);
 
	//Mio metodo per il progress meter
	this.setMeter('start');
 
	//attacco l'evento all'oggetto	
	req.onreadystatechange = this.managestatechange;
}
Amaz.prototype.managestatechange = function() {
//qui l'oggetto req è visibile pur non avendolo passato direttamente e
//senza this. 
	switch (req.readyState) {
		case 2, 3:
//Fase intermedia da gestire più avanti per il timeout
			break;
 
//Qui funziona. Mi viene correttamente notificato lo stato 4(COMPLETED).
//Io da qui vorrei richiamare il mio metodo createTree (che serve a
//mostrare i risultati) ma la risposta è 
//sempre this.createTree is not a function. A questo punto come cavolo
//faccio a riferirmi al mio metodo?
		case 4:
			this.xmlDoc = req.responseXML;
			this.createTree();	//BOMBA !!
			break;
	}	
}
Faser
-- 
FABIO SERRA
*Questo testo deve essere valutato secondo il senso della RFC-3*
Per rispondere in e-mail sostituire "invalid" con "faser"
--------------------

 in modo che siano sempre notificati i vari cambiamenti di stato.
Ciao Fabio.
Non ho approfondito piu' di tanto per ragioni di incompatibilità con i 
browser vecchi e per un bug di Mozilla, ma in questa pagina:
http://www.jsdir.com/goonline/gol0702.asp
trovi i sorgenti del mio articolo su Go!OnLine di Luglio/Agosto 2002.
Fare la cosa tutto JavaScript/DOM e' comunque un po' azzardato, Zer0 
suggeriva in un vecchio thread (fra marzo e aprile 2002) di usare FLASH o 
JAVA per acchiappare un XML lato client (non ho mai approfondito), con 
l'ovvia incognita della versione installata del plugin e della stessa 
effettiva presenza del plugin.
Mi ero dimenticato di farmi dare il PDF dell'articolo, scrivo alla redazione 
e cerco di mandarlo on-line la prossima settimana, intanto ti passo in mail 
il mio originale se vuoi.
 
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
 ----> itALY = it <----

 Segue breve codice con commenti.
[cut]
Mi hai incuriosito e ho buttato giu' un paio di righe di codice... a me
funziona, quindi nel tuo (e nelle parti che non hai postato) deve mancare
qualcosa... se non posti il costruttore e il createTree non posso fare
altro, vedi un po' tu...
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
MyObj.prototype.doSomething = function()
{
   alert('I\'m doing something');
}
MyObj.prototype.behave = function()
{
   this.doSomething();
}
function MyObj()
{
   return this;
}
var obj = new MyObj();
obj.behave();
// -->
</SCRIPT>
N.B. l'uso che fai della variabile req e' pericoloso: essendo globale, se la
modifichi da qualche parte esternamente all'oggetto ti sara' difficile
scovare la causa degli errori
~~
artemis.alpeia
"Quando Dirac usò questa funzione i matematici si sollevarono"
(T.Raimondi)

il mio originale se vuoi.
Certo, manda pure.
Ciao.
Faser
-- 
FABIO SERRA
*Questo testo deve essere valutato secondo il senso della RFC-3*
Per rispondere in e-mail sostituire "invalid" con "faser"
http://www.cfmentor.com
--------------------

scovare la causa degli errori
Vero, ho sbagliato. Grazie per l'aiuto.
Ciao.
Faser
-- 
FABIO SERRA
*Questo testo deve essere valutato secondo il senso della RFC-3*
Per rispondere in e-mail sostituire "invalid" con "faser"
http://www.cfmentor.com
--------------------

 probabilmente più semplice che con Flash e Java.
Ti posso assicurare che il parsing in Flash e' praticamente identico a 
quel che fai in JS, cosi' come la quasi totalita' dei parser XML per i 
piu' disparati linguaggi.
Per tornare al discorso di prima, una delle mie filosofie e' "the right 
tool, for the right job".
Non sono un fanatico di Flash, anzi (l'uso maggiore che ne faccio, e' 
per inchiostrare tavole), ma vi sono applicazioni in cui cade a pennello 
il suo utilizzo, soprattutto dalla quinta e sesta versione (la 4, 
neanche l'ho mai presa in considerazione. Adesso e' una tecnologia un 
po' piu' matura, e abbastanza diffusa da poter essere usata).
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 prove :-)
this.doSomething() non viene visto semplicemente perche' cambia il 
riferimento all'oggetto this, che NON E' piu' il tuo oggetto primario.
Una  delle strade, e' quella appunto di salvarsi all'interno 
dell'oggetto un puntatore (scusa il termine improprio) all'istanza di 
se' stesso (ovvero this) e richiamarlo successivamente.


po' piu' matura, e abbastanza diffusa da poter essere usata).
Lo so, lo so. Ho anche cominciato a seguire dei tutorial, ma per quello che
faccio non mi convince completamente, pur avendo il vantaggio di usare CF
lato server.


se' stesso (ovvero this) e richiamarlo successivamente.
Infatti, ho fatto così. Ma sarà poi utile programmare ad oggetti in
Javascript? Io mi sto sforzando, ma alle volte mi sembra fatica sprecata.


 prove :-)
aaaahhhh!!! ci deve essere una maniera piu' semplice, su!! ^^;;
P.S. cmq su javascript non ho mai avuto problemi a implementare gli oggetti,
l'unico difetto e' che non hai membri privati e non puoi ereditare, e in
piu' tutto vive nell'ambito di una pagina (si lo so che si puo' usare il
frameset ma mi da' la nausea :PP)
~~
artemis.alpeia

 Io mi sto sforzando, ma alle volte mi sembra fatica sprecata.
Infatti, dipende da cosa devi sviluppare. Talvolta, il gioco puo' non
valerne la candela, proprio come nella programmazione canonica.
Altre volte creare oggetti magari anche banali e' l'unica strada possibile
in JS (del resto, non hai puntatori come in C/C++.. laddove la' puoi
scegliere che strada usare, se in JS vuoi fare una "lista dinamica", devi
crearti forzatamente un oggetto a cui puntare ad esempio).
--------------------------------
Inviato via 
http://usenet.libero.it

wrapper che ho fatto.
Giusto per curiosità: che cosa ha fatto? Sai, sono da poco che sto usando
JS oltre la convalida dei form e sono incuriosito nel capire fino a dove si
può e convenga arrivare.


 può e convenga arrivare.
Ho utilizzato molto JS su ASP, all'epoca. Mi ha permesso di costruire 
lato server dei framework e wrapper a controlli (interfacce a database 
Notes) molto potenti e versatili, che con VBS mi sarei sognato.
Certo, adesso il discorso e' diverso con 
ASP.NET
, JSP e PHP.
Lato client invece, framework e API sulla gestione di DHTML cross-
browsing (per i siti), e delle GUI delle web application (per le 
intranet principalmente), con widgets e altro.
Poi ho fatto anche esperimenti di varia natura, ma giusto per testare i 
limiti dei browser e fargli fare cose che tecnicamente non dovrebbero 
fare.. ergo, non hanno molti riscontri pratici. ^_^"
Ma le applicazioni sono molteplici. Nei vari framework che ho fatto ho 
cercato di includere cio' che di meglio trovavo in altri linguaggi (ad 
es. PHP) e di portarlo ad oggetti per semplificarmi e velocizzarmi lo 
sviluppo.


 Certo, manda pure.
In casella.


l'articolo era nato :-(
Non è un bug è una misura "nazista" di sicurezza ! Non puoi caricare file
da siti diversi da quello originario a meno che:
1) Apri il file con File --> Open 
2) Abiliti i privilegi. 
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) {
alert(e);
   }
3) Aggiungi nel file prefs.js (C:\Documents and Settings\utente\Dati
applicazioni\Mozilla\Profiles\default\sigla\prefs.js) un'opzione per
disabilitare quelle opzioni di sicurezza. Non ricordo esattamente come si
chiama. Tieni comunque presente che moltissime impostazioni possono essere
impostate da quel file javascript di preferenze e non hanno un
corrispottevo gui.
4) Firmi i tuoi script. In questo caso devi prendere un certificato
digitale (tutto gratuito da netscape), fare qualche altra cosa che non so
:-) ed a quel punto all'utente viene chiesto se vuole permettere l'accesso
a risorse esterne o meno
Faser
-- 
FABIO SERRA
*Questo testo deve essere valutato secondo il senso della RFC-3*
Per rispondere in e-mail sostituire "invalid" con "faser"
--------------------

 da siti diversi da quello originario ...
Su questo siamo d'accordo e si chiama "Same Origin Policy" 
(
http://www.jsdir.com/red
 scaricati il file "Security"), ma non ha senso per 
un file XML perche' va a farsi benedire il concetto stesso di XML no? :-(
Quando ho scritto quell'articolo volevo dare una soluzione client-side per 
visualizzare su un sito web le news di PuntoInformatico (o il feed esterno di 
dev2DEV.it che usiamo noi ad esempio), ma il bug di Mozilla ha mandato tutto 
a monte :-(


a monte :-(
Ok, ma non è proprio un baco :-) E' appena uscito un interessante articolo:
http://devedge.netscape.com/viewsource/2002/bypassing-security-restrictions/
Faser
-- 
FABIO SERRA
*Questo testo deve essere valutato secondo il senso della RFC-3*
Per rispondere in e-mail sostituire "invalid" con "faser"
http://www.cfmentor.com
--------------------

 Vero, vero, anche se a ben vedere potresti scaricare qualunque cosa.
Giusto perche' siamo in argomento, la M$ rilascio' prontamente un 
bugfixed sulla sicurezza, in quanto tramite MSXML si riusciva a 
scaricare qualunque file dalla macchina conoscendone il percorso.
