Newsgroup: it.comp.lang.javascript
Titolo: asincronia di esecuzione codice

riciao
mi riallaccio al 3d di ieri "combo da ripopolare senza ricaricare la 
pagina" perchè questa parte è risolta utilizzando ajax, ma ora ho ancora 
un piccolo problemino:
scenario:
form con una combo con un elenco valori.
se un valore non è presente a fianco della combo c'è un pulsante che mi 
apre una popup che mi permette di inserire le voci non presenti in una 
tabella su db e in chiusura della pop up tramite ajax ricarico solo la 
combo con i valori modificati.
la ricarica dei valori funziona ma non avviene alla chiusura della pop 
up in quanto dopo l'apertura della pop up il codice js prosegue subito.
come faccio a bloccare l'esecuzione del codice aspettando che la pop up 
venga chiusa tipo così:
apro_popup
quando la popup è chiusa
   ricarica_valori_cambo	 (e questa funzione è ok)
mi stò perdendo con lo studio di window.opener e closed.... argh!!!!!
paolo

 up in quanto dopo l'apertura della pop up il codice js prosegue subito.
Stai sbagliando approccio.
con una function apri la popup, con un'altra function aggiorni i valori.
Poi dalla tua popup con un tasto scateni la function, del tipo
  opener.tuafunctioncheaggiornaselect(); window.close();
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

 
scusa, non capisco, forse non mi sono spiegato, posto un po' di codice:
function apri_pop_e_ricarica_select()
{
sList = window.open("tab3popup.asp", "list", "width=490,height=400");
// io tutto questo codice che segue che mi fa' il ricaricamento della 
combo dovrei eseguirlo solo alla chiusura della pop up "tab3popup.asp" 
oppure sbaglio?
var url="pag5.asp"
xmlHttp=GetXmlHttpObject(stateChanged)
xmlHttp.open("GET", url , true)
xmlHttp.send(null)
}
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("DIV_SELECT_ID_GRAMMATURA").innerHTML=xmlHttp.responseText 
}
}
function GetXmlHttpObject(handler)
{
var objXmlHttp=null
if (navigator.userAgent.indexOf("Opera")>=0)
{
alert("This example doesn't work in Opera")
return
}
if (navigator.userAgent.indexOf("MSIE")>=0)
{
var strName="Msxml2.XMLHTTP"
if (navigator.appVersion.indexOf("MSIE 5.5")>=0)
{
strName="Microsoft.XMLHTTP"
}
try
{
objXmlHttp=new ActiveXObject(strName)
objXmlHttp.onreadystatechange=handler
return objXmlHttp
}
catch(e)
{
alert("Error. Scripting for ActiveX might be disabled")
return
}
}
if (navigator.userAgent.indexOf("Mozilla")>=0)
{
objXmlHttp=new XMLHttpRequest()
objXmlHttp.onload=handler
objXmlHttp.onerror=handler
return objXmlHttp
}
}

 oppure sbaglio?
esatto ... ma non puoi attendere finché non chiudi la popup perché
javascript non è multithreading, devi per forza passare da un'altra
function. 
Sposti quindi tutto quanto sotto in un'altra function e la richiami quando
chiudi la popup come ti ho scritto.
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.

Cristiano Larghi ha scritto:

ok ho fatto così nel pulsante di chiusura della pop up richiamo con 
"opener.ricarica_select(); window.close();", ma a questo punto non mi 
funziona + la riscrittura della combo, e mi ritorna sulla form 
originaria eliminandomi del tutto la combo ed il suo contenuto!

Paolo ha scritto:

edit:
non funziona con firefox 1.5.03, con ie6 pare funzioni il tutto...

 non funziona con firefox 1.5.03, con ie6 pare funzioni il tutto...
e che errore ti segnala la console?
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

 
"opener has no properties"

 "opener has no properties"
:-O e con IE funziona?
Stai ricaricando la pagina?
hai già cercato con google?
http://groups.google.it/groups?sourceid=navclient&hl=it&ie=UTF-8&rls=GGLG,GGLG:2005-48,GGLG:it&q=opener%20has%20no%20properties%20firefox&sa=N&tab=wg


 
con ie6 funziona come hai detto.
con firefox rettifico, non avevo ricaricato la pagina e cancellato la 
cache. Non mi dà nessun errore in console, ma quando esegue la function 
"refresh_select" elimina del tutto i tag "<select>e tutto quello che cè 
dentro</select>"
non mi ci raccapezzo già più :-(

Paolo ha scritto:

per farla andare, per ora ho dovuto aggiungere un altro pulsante sul 
form originale che richiama il refresh della combo...

 form originale che richiama il refresh della combo...
non saprei che dirti, fai un po' di debug client-side. 
-- 
"Non sai che ci vuol scienza
 ci vuol costanza
 ad invecchiare senza maturità"
									    F.G.

 
cosa usi come debugger javascript? io il Venkman, ma ogni tanto si 
imballa...

 imballa...
io l'alert("fase 1"); alert("fase 2"); etc in ogni riga della parte che non
funziona ...
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.

 
:-)) si, mi sà che è sempre il miglior e veloce debugger!

 
se uso il tuo debugger ( :-) )
alert(document.getElementById("DIV_SELECT").innerHTML)
firefox mi torna una stringa vuota, mentre ie correttamente mi ritorna i 
tag <select>

 tag <select>
e che cos'è questa "DIV_SELECT"? non è che hai più di un tag con lo stesso
id?
Domanda: non è che stai scrivendo delle option dentro una select con
innerHTML, vero?
-- 
"Run rabbit run
 dig that hole, forget the sun
 and when at last the work is done
 don't sit down, it's time to dig another one"
									    P.F.

 
div_select č solo l'id del div dove č contenuta la select...
ripeto, il tutto funziona se richiamato da pulsante stand-alone, non 
funziona se accodato al richiamo del pop up (solo firefox, mentre in ie 
in entrambi i casi funge)
 > Domanda: non č che stai scrivendo delle option dentro una select con
 > innerHTML, vero?
? se devo riscrivere il tag select dentro ci sono per forza le option 
oppure non ti ho capito...

 oppure non ti ho capito...
intendo dire:
var js="<option>1</option>";
tuaselect.innerHTML=js;
non stai facendo questo, vero? (hai scritto che recuperi un div e lui ti
indica le select, sto chiedendo perché non ho capito cosa intendi ...)


 set rs = nothing   
 > %>
alla fine con questa
document.getElementById("div_select").innerHTML=xmlHttp.responseText
butto dentro il tutto...
se io faccio un alert di xmlHttp.responseText il risultato è nulla, 
mentre con ie torna correttamente i tag reimpostati...
la stessa proc lanciata a parte anche con firefox funziona...

 la stessa proc lanciata a parte anche con firefox funziona...
hai una pagina in linea dove vedere questa curiosissima cosa?


 hai una pagina in linea dove vedere questa curiosissima cosa?
per ora no ma se non riesco a venirne fuori a breve ne pubblico una al 
volo...