5 messaggi dal 28 febbraio 2003
www.appia-asfalti.it
Salve a tutti, posto anche qui il seguente problema
(spero non sia un problema :D) :
in una pagina ASP ho una funzione VBS script che
mi carica in un foglio excel (creandolo) dei dati
di una query; ora, poichè il processo è lungo
ho pensato di immettere una simil-barra di progressione html
per non scoraggiare l'utente :-) :

<div style=" border: 2px solid black; width:320px; position: absolute; left: 162; background-color:silver;">
<table border="0" cellpadding="0" cellspacing="0">
<td><img name='pic1' src='../../images/transparentblock.gif' width='16' height='16'></td>
<td><img name='pic2' src='../../images/transparentblock.gif' width='16' height='16'></td>
<td><img name='pic3' src='../../images/transparentblock.gif' width='16' height='16'></td>
<td><img name='pic4' src='../../images/transparentblock.gif' width='16' height='16'></td>
<!--...etcetera-->
</table>
</div>

La suddetta barra dovrebbe essere alimentata dinamicamente
per ogni ciclo for che la pagina ASP fa compiere
al sudetto Vbscript, e ho trovato un metodo che
teoricamente funziona :

<script language vbscript>

FOR

if <Variabile> = 1 then
document.pic1.src= "../../images/redblock.gif"
end if

'etctetera..
NEXT

'etcetera..

Ora: il problema è che il codice VBs mi alimenta sì
la barra, ma solo alla *completamento* del
processo for - next la pagina web mi mostra
la barra riempita, e non *durante*
il ciclo, come vorrei.

Ho notato che se metto una msgbox dentro
la if :

if <Variabile> = 1 then
msgbox "entrato"
document.pic1.src= "../../images/redblock.gif"
end if

(che ovviamente compare a video ogni volta
che la condizione nel ciclo si verifica)
allora la barra mi viene alimentata gradualmente
(un pezzo alla volta dopo ogni click) come desidererei.

Esiste unqualche metodo che restituisca subito alla pagina
web, aggiornandola, il risultato di quella if, esattamente
per come avviene se metto lo "stop" con la msgbox ?
(che credo obblighi la pagina client a riaggiornarsi
subito)?
Ho provato con document.refresh ma senza successo.

grazie infinite in anticipo

Emiliano D'Onofrio
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
il fatto è di default il server invia dati al client solamente dopo aver prodotto TUTTO l'output. Ecco perchè non vedi la "progressione": il server non chiama il client se prima non ha finito.

Tuttavia, usando il metodo Response.Flush, puoi scaricare dei dati sul client man mano che vengono prodotti dal server. Ad inizio pagina metti questa direttiva:

<%Response.Buffer = true%>

e poi metti il flush subito prima del next del tuo ciclo for:
<%
for....
....
...
%>
qui aumenti la lunghezza della tua barra
<%
Response.Flush
next
%>

Così dovrebbe andare

Enjoy learning and just keep making
5 messaggi dal 28 febbraio 2003
www.appia-asfalti.it
Niente da fare, ho provato ma non funziona:
continua ad alimentarmi la barra solo
alla fine del processo (quando
compare il foglio excel a video):
il problema è che (probabilmente) il vbs
script (lato client) è indipendente da ciò
spedisce o non spedisce il server,
occorrerebbe trovare un qualche metodo
lato client che aggiorni la pagina web ogni
volta che la condizione all'unterno dello script
diventa true...ma fin'ora non ho trovato nulla.

cmq grazie !

Edo
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
facciamo il punto: Response.Flush permette l'invio di informazioni al client durante il caricamento della pagina. Quello che devi inviare è un comando vbscript o jscript che aggiorni la barra. La funzione lato client dovrai costruirla tu, ma non è così difficile.

function barra(x){
document.getElementById("barra").width = x
}

e poi nel ciclo for ci metti:

<script language="Javascript">
<%
for i = i to 100
....istruzioni....
Response.Write "barra("&i&")"&vbcrlf
Response.Flush
%>
</script>

quindi il flush scaricherà sul client per 100 volte l'istruzione:
barra(x)
che all'aumentare di i farà incrementare la barra d'avanzamento.
il tuo script com'era?
ciao

Enjoy learning and just keep making
5 messaggi dal 28 febbraio 2003
www.appia-asfalti.it
BrightSoul ha scritto:

<taglio>
quindi il flush scaricherà sul client per 100 volte l'istruzione:
barra(x)
che all'aumentare di i farà incrementare la barra d'avanzamento.
il tuo script com'era?
ciao


Dunque, il fatto è che il mio script è Vbs, dovendo
richiamare un foglio excel (nn ho idea se in Js si possa fare):

<script language="VBScript">

'Inizio Funzione di Stampa

Dim xExcel
Dim xRange
Dim Titoli
On Error Resume Next
Set xExcel = CreateObject("Excel.Application")

xExcel.Visible = False
xExcel.Workbooks.Add

ScriviTitoli "<%=Titoli %>", xExcel 'passo i titoli

<%

NumTotRighe = i 'numero totale di righe

TenPercent = Cint(NumTotRighe / 10) ' calcolo la
' percentuale che corrisponde ad 1/10 delle righe totali, visto che mi
'varia di volta in volta

Num = 10 ' numerico x la progessione dei picN sulla pag Web

NumRiga = 0 ' inizializzo il progressivo delle righe

Percent = TenPercent 'progressivo della percentuale righe elaborate

Barra = 0 'determinerà se la barra deve essere alimentata o no

For Riga = 0 To i-1 'CICLO che riempie il foglio excel

NumRiga = Riga +1 'alimento il numriga ad ogni ciclo

if NumRiga = Percent then 'quando il numriga è = al 10% delle totali :
Percent = Percent + TenPercent 'aumento del 10%
Barra = +1 'il vbs script mi aumenta la barra di una tacca
Num = Num +1 'alimento il N x il document.picN
ELSE Barra = 0 'altrimenti non faccio nulla
end if
%>

if <%=Barra %> = 1 then
document.pic<%=Num %>.src= "../../images/redblock.gif"
end if 'la if che mi alimenta la barra

ScriviTesto "<%=Riga %>", "<%=TestoArray2(Riga) %>", xExcel
'questo invece mi alimenta il foglio excel chiamando la funzione
'scrivitesto vbs inclusa nella pagina

<%

next

%>

Tutto qui !
il problema è che sono già all'interno di uno script,
se provo a fare la response.write all'interno del
ciclo (anche usando l'espendiente di fare
response.write "<Scri" & "pt>"..etcetera) per
alimentare la barra attraverso un secondo script
con il response.flush
si crea solo un papocchio che mi blocca la pagina
(ci ho già provato e non ne sono venuto a capo)...
Per ora brancolo nel buio :-)
Cmq grazie ancora

ciao

Edo

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.