Newsgroup: it.comp.lang.javascript
Titolo: Simulare processi sincroni - Parte 2

Innanzi tutto grazie Cristiano... penso che tu mi abbia aggiunto tra i
cattivi :-))
Credo di aver fumato l'inverosimile.... qualcuno aveva ragione a dirmi
di aggiungere del tabacco :-))
Allora, facciamo così: visto che sto flippando di brutto e inizio a
impazzire, io vi dico da zero che voglio e voi mi mandate un esempio
stupido che mi faccia capire.
Lo scopo, come avrete capito, è simulare il remote scripting: io, dalla
mia pagina, devo chiamare una funzione sul server passando dei parametri
e mi deve venir restituito il risultato.
Es: passo 2 e 3, e mi torna 5(la somma).
che ne dite?
grazie :-)

 Es: passo 2 e 3, e mi torna 5(la somma).
Che puoi fare tutto con xmlhttp; dopo averlo installato dovrebbe installarti
anche qualche esempio; io, avendo fatto un paio di include apposta, non ho
purtroppo esempi semplici sotto mano.
Cerca un po' in giro (o sentiamo gli altri), se proprio non salta fuori ti
faccio un esempio al volo appena riesco.

 faccio un esempio al volo appena riesco.
Non hai piu' l'esempio che ti mandai via mail io? Potresti postargli 
quello.. io al momento non ce l'ho proprio sottomano.
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

Eh, aspettavo lo dicessi, non volevo dirlo io, sai, magari non volevi o
chessò....
Lo ho a casa quasi sicuramente, stasera cerco e copioincollo

 chessň....
:) Ti ringrazio per la premura, davvero.. fa piacere che ci sia qualcuno 
che pensa ancora a queste cose.. :)
Cmq sia non e' un esempio da segreto militare, quindi vai libero..! ;)


no...... ZER0 guarda se ce l'hai quì... se riesco ad averlo oggi molto
meglio.
cmq io un esempio l'ho trovato: ma non capisco una cosa: devo per forza
creare l'oggetto anche lato client?
devo per forza creare una pagina per ogni funzione? come passo i parametri?
lo metti quì (preso da sito m$):
http://www.clublavalle.it/dani/asp_samples.zip
vedere file shared.htm (o anche gli altri)


inoltre, xè devo passare la stringa tra i tab <xml>?
non capisco 1 ..... (indovina :-) )


<P>
The code on the server is :
<PRE>
&lt;object id=xmldoc progid=Microsoft.XMLDOM runat=Server></object>
&lt;%
 Application("SHAREDXML") =
Server.CreateObject("Microsoft.FreeThreadedXMLDOM");
 // put
 Application("SHAREDXML").load(Request);
 // get
 Application("SHAREDXML").save(Request);
%&gt;
</PRE>
Quanto sopra (shared.htm) non so cosa sia (in questo momento non ce la
faccio a studiarmelo)
Però la logica è: eseguo la chiamata al server (metodi open e send);
dall'altra parte fai quello che devi e restituisci il risultato (metodo save
in get.asp).
Anch'io all'inizio non ci avevo capito molto, l'esempio di Zer0 che mi aveva
mandato era semplicissimo e chiarissimo ma, ahimé, mi sa che devi aspettare
stasera...

 
http://www.clublavalle.it/dani/asp_samples.zip
Non ho modo adesso di vedere che tipo di esempio e', ma ti assicuro che 
e' semplicissimo usare l'xmlhttp.
Nel documento CHM "Microsoft XML Core Service (MSXML) 4.0" c'e' tutto 
cio' che ti serve sapere, con esempi a seguito.


ho trovato qualcosa in giro.
però ho questa domanda: nella mia pagina asp lato server posso mettere n
funzioni e decidere nella chiamata
dal client quale funzione eseguire?


 dal client quale funzione eseguire?
Certo. Tu passi dei dati al server, in forma XML. Il server li processa, 
e ti risputa altri dati in XML.
Tu puoi farci quel che ti pare con questi dati.
Anche mandare il nome della funzione da eseguire, i rispettivi 
parametri, query, e quant'altro.


e come faccio a passare + parametri e dall'altra parte riottenerli?


certo che sto guardando la documentazione... ma non trovo quel che mi
serve.....
altrimenti non lo chiederei...


forse non l'ho detto, ma io stò lavorando in ASP, non in XML (che non conosco
assolutamente)....


 altrimenti non lo chiederei...
a) Prendi il file CHM allegato all'SDK chiamato "Microsoft XML Core 
Service (MSXML) 4.0"
b) Clicca sulla linguettina "Cerca" (la terza) nella barra a destra
c) Scrivi "xmlhttp" nella casella di testo
d) Premi invio
e) Clicca sul primo risultato ottenuto e..
TA-DAN!
:)


 assolutamente)....
l'XML e' un formato dati, ASP e' un enviroment.
Il fatto che tu non conosca XML chiarifica meglio i dubbi che hai 
espresso, allora.
Ti consiglio di dare una breve occhiata a un qualsiasi articolo 
introduttivo su cos'e' l'XML, e come si puo' usare, prima di addentrarti 
nell'uso dell'XMLhttp.
prova un po' su 
html.it
 o vai su google e cerca qualche sito che ti dia 
almeno le basi dell'XML (che come concetto e' semplicissimo, ma se non 
si conosce e' ovvio che possa risultare ostico).
Dopo, ti si apriranno le porte di un nuovo mondo, e capirai come 
l'xmlhttp possa risolvere gran parte dei tuoi guai in modo davvero 
brillante.


sì ok, quel codice l'ho già trovato.
ma come vedi non risponde alle mie altre domande: lì utilizza un file asp
che esegue direttamente il codice.
ma come richiamo invece una funzione specifica se quell'asp contiene N
funzioni? e come gli passo N parametri?
questo non l'ho ancora trovato...........


ok grazie
:-))


Eccoci; l'esempio è tanto semplice quanto ben fatto; basta mettere i 2 files
nella stessa dir (e installare xmlhttp) e dovrebbe funzionare...
Un ringraziamento a Zer0, autore e fornitore dell'esempio (il mio è solo un
copiaincolla).
Lato client: file xmlClient.asp:
<%@ language=Javascript %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 <title>XML Client Test</title>
<script language=JavaScript>
function fillCity(){
        var strState =
document.frmTest.cboState.options[document.frmTest.cboState.selectedIndex].v
alue;
        var xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
        xmlHTTP.open("POST", "./xmlServer.asp", false);
        xmlHTTP.send("<REQUEST><STATE>" + strState + "</STATE></REQUEST>");
        var xmlDOM = new ActiveXObject("Microsoft.XMLDOM");
        xmlDOM.loadXML(xmlHTTP.ResponseText);
  xmlHTTP=null;
        if (xmlDOM.parseError != 0){
   alert("Error occurred: " + xmlDOM.parseError.reason);
   xmlDOM=null;
   return;
        }
        var objCity = xmlDOM.documentElement.firstChild;
        var n=0;
  for (n=0;n<document.frmTest.cboCity.length;n++)
   document.frmTest.cboCity[n]=null;
  n=0;
        while (objCity != null){
   document.frmTest.cboCity[n] = new Option(objCity.text, objCity.text);
   n++;
   objCity = objCity.nextSibling;
        }
}
</script>
</head>
<body>
<form name=frmTest method=POST>
<table>
 <tr>
  <td>First Name (<em>dummy field</em>)</td> <td> <input name="txtFirst">
</td>
        <td>Last Name (<em>dummy field</em>) </td> <td> <input
name="txtLast"> </td>
 </tr>
 <tr>
  <td> State (<em>XML-send</em>)</td>
   <td>
    <select name="cboState"  width="100" onChange="fillCity()">
     <option selected value="Italia">Italia</option>
      <option selected value="USA">USA</option>
      <option value="Other">Other</option>
    </select>
   </td>
  <td> City (<em>XML-retrieve</em>)</td>
  <td>
   <select name="cboCity" width="100">
    <option selected value=""></option>
   </select>
  </td>
 </tr>
</table>
</form>
</body>
</html>
lato server (xmlServer.asp):
<%@ language = Javascript %>
<%
        var xmlDOM = Server.CreateObject("Microsoft.XMLDOM");
        xmlDOM.load(Request);
        if (xmlDOM.parseError != 0){
                Response.Write("Error in Request: " +
xmlDOM.parseError.reason);
                Response.End();
        }
        var strState = xmlDOM.getElementsByTagName("STATE")[0].text,
         strXML = "<RESPONSE>";
  if (strState=="Italia"){
   strXML += "<CITY>Firenze</CITY>";
   strXML += "<CITY>Rimini</CITY>";
   strXML += "<CITY>Milano</CITY>";
  }else if (strState=="USA"){
   strXML += "<CITY>St. Luis</CITY>";
  }else if (strState=="Other"){
   strXML += "<CITY>Moon</CITY>";
   strXML += "<CITY>Venus</CITY>";
  }else{
   strXML += "<CITY>You never see this.</CITY>";
  }
  strXML+="</RESPONSE>";
        Response.Write(strXML);
%>

 Un ringraziamento a Zer0, autore e fornitore dell'esempio (il mio č solo un
