--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ab...@newsland.it
> Ho una pagina ASP. Ho in questa pagina una sezione javascript; alla fine
> di una serie di istruzioni, voglio che richiami una Sub scritta in
> Vbscript. Il codice in js che la richiama è nomesub(); e sembra
> richiamarla correttamente perchè in Public Sub aggiorna() (la sub in
> vbscript) ho inserito per provare un msgbox che viene eseguito. Ora, però,
> vorrei che invece di fare il msgbox, la sub in vbscript mi scrivesse su un
> database. Le istruzioni inserite nella sub sono CORRETTE, ma non sono
> eseguite.
Cadi nel classico tranello in cui cadono molte altre persone agli inizi
della programmazione client/server: Ovvero, non hai ben chiaro che i due
sono processi separati, che agiscono in contesti e tempi separati.
Non c'entra tanto il tipo di script usato.. VBS piuttosto che JS. Il punto
e' che la sub VBS e' uno script server (ASP) che deve aggiornare dei dati su
un database nel server,
mentre la funzione Javascript e' stata scritta lato client.
Quando un client (browser) fa la richiesta di una pagina ASP, il server
prende la pagina ASP, interpreta quello che e' stato scritto nei tag <% %>,
e sputa fuori al client il risultato in HTML.
A quel punto, quando la pagina e' stata finita di "consegnare",
l'interazione Client/Server e' finita. Il protocollo TCP/IP e' difatti
stateless. Per quanto riguarda il server, il client potrebbe essere
sprofondato nelle fosse delle marianne. Potresti anche essere scollegato da
internet. La pagina, adesso, vive di vita propria sul client.
Se chiami quindi una funzione scritta in ASP, per il client non ha alcun
senso. Lui ti da' l'errore perche' si aspetta di trovare quella funzione
nella pagina.. ma, ovviamente, se guardi il source risultante, quella
funzione non esiste.. essendo stata scritta lato server.
Per eseguire un qualsiasi comando lato server, devi necessariamente fare una
nuova richiesta HTTP al server.
Spero di esser stato chiaro.. ma ne dubito :) quindi, se c'e' qualche cosa
che nn ti torna, fischia pure.
--------------------------------
Inviato via http://usenet.libero.it
> Grazie Zero ! Sei stato molto chiaro ! Allora..... proviamo a ribaltare
> (modifichiamo la prospettiva) la vicenda. Togliamo VBS e pensiamo solo a
> JS. Immagino che sia possibile (si, lo so che lo è !), scrivere in un DB
> (sql server) usando JS.
Si che lo e', ma ti sfugge (colpa mia che nn sono stato sufficientemente
chiaro) il discorso di fondo. :)
Indipendentemente dal linguaggio di script che usi (VBS/JS) e' il *contesto*
a cui devi prestar attenzione.
Ovvero: Tu puoi anche scrivere una pagina ASP che scriva sul DB in JS (lato
server), ma cmq quando questa pagina andra' sul browser dell'utente ,
nessuna funzione JS (client) potra' mai richiamare una funzione JS (lato
server).
Facciamo un esempio semplice:
/* Questo e' lato SERVER */
<% @language=Javascript %>
<%
/* setto queste variabili JS - SERVER */
var hello="Hello, my friends!",bye="C'ya";
%>
<script> /* Questo e' lato client */
/* Qui creo una variabile bye.. ma ancora questo codice non sara' eseguito,
fintanto che nn sara' stato eseguito tutto il codice ASP e quindi la pagina
sara' sul client.. */
var bye="Good Bye"!
/* qua mi "genera un errore", in quanto sul client NON ESISTE nessuna
variabile
chiamata "hello" */
alert(hello);
</script>
/* questo e' di nuovo lato server */
<%
Response.Write(bye)
%>
Analizzando il sorgente - e mandandolo in esecuzione, vedremo come l'alert
non scriva "Hello my friends" e vedremo che nella pagina avrai scritto
"C'ya" e non "Good Bye".
Questo perche' la pagina va letta in questo modo:
Ovvero, tutto cio' che e' LATO SERVER, viene eseguito PRIMA che la pagina
stessa prenda vita. Fino a quel momento, cio' che e' FUORI dai tag ASP,
viene considerato del puro e semplice testo, senza alcuna "reattivita' " (in
ASP.NET il discorso e' diverso, ma nn andiamoci ad incasinare la vita).
Quindi, se tu analizzi la pagina, dovrai prendere prima in considerazione i
tag ASP. "Eseguirli" mentalmente, e vedere l'output restituito.
Il client, lavorera' appunto su quell'output. La pagina prendera' vita sul
browser in quel momento. Ma, a quel punto, ASP e' gia' "fuori dal gioco".
> dim conn
> dim rs
> dim SQL
> set conn = Server.CreateObject("ADODB.Connection")
> set rs = Server.CreateObject("ADODB.Recordset")
> conn.Open "DSN=nomedsn", "SA", "" (è sql server)
> SQL = "Select * FROM Tabella where ID = 1"
> Set rs = conn.execute(SQL)
> .. e poi ci faccio come detto le varie operazioni. (UPDATE, DELETE ecc
> ecc)
> Domanda:
> Quali sono in JS le istruzioni EQUIVALENTI ?
Giusto per dover di cronaca, l'equivalente in JS (+ che JS sarebbe JScript,
ma ora nn stiamo a vedere il capello..) da usare in pagine ASP sarebbe:
var conn=Server.CreateObject("ADODB.Connection"),
SQL = "Select * FROM Tabella where ID = 1";
conn.Open("DSN=nomedsn", "SA", "");
var rs=conn.execute(SQL);
> runat=server, che significato assume e come/quando va assegnato ?
Quando vuoi usare lo script lato server e non client (ovvero, tutte le varie
istruzioni ASP).
Puoi anche usare <% %> al posto di <script runat=server>, e' equivalente.
Ricordati solo di specificare prima il linguaggio di default (o nei settings
del sito, oppure con <% @language=Javascript %> come prima istruzione).
Per esempio, va usato nello script JS che ho scritto prima come porting
delle tue istruzioni VBS. Se tu provassi ad eseguirlo client, e non server,
ti andrebbe un po' nelle peste.. "Panico! non trovo l'oggetto Server", ti
direbbe il browser :)