Newsgroup: it.comp.lang.javascript
Titolo: Ajax ed eliminazione Iframe

Ho un iframe che, una volta esaurito il suo compito, vorrei
eliminare...
Il fatto è che il focus è sull'iframe quindi come faccio a farlo
chiudere se ogni volta che faccio un cambiamento questo avviene dentro
l'iframe?
Mi è stato suggerito di utilizzare ajax ma, anche leggendomi tutta la
documentazione presente nel web, non capisco come poter fare...
Qualche aiutino? 
Vi prego, non ditemi anche voi che sono ot :(

 Vi prego, non ditemi anche voi che sono ot :(
No, almeno non ancora. :)
-- 
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 che intendi.
Hai ragione.. forse mi sono spiegata male... sorry... vediamo...
Per evitare il refresh di tutta una pagina per solo due campi ho creato
un'iframe all'interno della mia paginina... il mio problema è che
quando ho modificato questi campi e premo invio vorrei che l'iframe
sparisse e tornasse la pagina principale...
+---------------------------------------+
|                                         |
|                                         |
|                                         |    <<--- pagina all'inizio
|               Pag. A                |
|                                         |
|                                         |
+---------------------------------------+
+---------------------------------------+
|                                         |
|                                         |
|               Pag. A                |
|                                         |
|  +--------------------------------+   |  <<--- pagina con l'iframe
|   |                                 |   |
|   |          Pag. A             |   |
|   | Campo1   Campo2     |   |
|  +--------------------------------+   |
+---------------------------------------+
+---------------------------------------+
|                                         |
|                                         |
|               Pag A                 |    <<--- pagina alla fine
|    con i campi aggiornati     |
|                                         |
|                                         |
+---------------------------------------+
Una volta terminato con l'iframe come posso far chiudere l'iframe e
tornare a visualizzare solo la pagina principale(Pag. A senza iframe)?
Non ho un esempio online... il sito è su rete locale... la pagina che
carico nell'iframe è interna al sito...
:) Se posso evitare ajax mi sentirei molto meglio :D

 uno facente parte di questa categoria. :)
Vedo che hai evitato la solita spippola sull'acronimo :)
Presto ti rassegnerai all'inevitabile!
-- 
Nando [?]
Apostolo della Prova

 :) Se posso evitare ajax mi sentirei molto meglio :D
A mio parere, dato il contesto in cui sei, usare XmlHttpRequest sarebbe la
scelta migliore.
Breve panoramica su "ajax" e "XmlHttpRequest" in modo che tu capisca di cosa
stiamo parlando. Mettiti comoda.
Partiamo dall'ultimo: XmlHttpRequest è un oggetto istanziabile da
javascript, che ti permette di fare chiamate remote in modo programmatico,
senza cambiare pagina. E' molto versatile, perché puoi fare richieste in
GET, POST (come se si trattasse dell'invio di dati da una form), HEAD (solo
per ottenere gli header di una certa risorsa) e via dicendo.
Inoltre puoi fare richieste sincrone e asincrone.
Le richieste asincrone, sono come quelle che fai quando carichi una pagina
nell'iframe: ovvero una volta che invii la richiesta per la pagina, lo
script continua la sua esecuzione: il caricamento avviene in parallelo al
normale flusso dello script.
Il bello di XmlHttpRequest è che ti permette di fare anche richieste
sincrone: ovvero lo script non prosegue fintanto che il server non ha
risposto alla richiesta. Questo diventa molto comodo in moltissimi casi.
Non ti lasciar traviare dal nome: Le richieste e le risposte non devono
essere forzatamente in XML, anzi. Diciamo che quella è una possibilità in
più che hai, ma non un limite.
"AJAX" invece è un acronimo, un termine per lo più commerciale (dato che
vuol dire "Asyncronous Javascript And XML", che con il suo reale utilizzo
avrebbe ben poco a che vedere. Hanno scelto come nome questo solo perché
suonava bene, commercialmente parlando. E l'hanno fatto a ragione, visto il
successo che ha avuto), che identifica sostanzialmente una "metodologia" di
sviluppo client, una serie di tecnologie utilizzate congiuntamente per
sviluppare applicazioni web based o siti di un certo tipo.
Se conosco il DHTML (altro acronimo dei tempi andati), AJAX ne è l'erede.
Difatti mentre DHTML era un termine che raggruppava (X)HTML+JS+DOM+CSS, AJAX
non fa altro che aggiungere alla lista l'oggetto XmlHttpRequest.
Purtroppo "ajax" è anche un termine altamente frainteso, e utilizzato in
malomodo.
Quindi, se devi documentarti un po' a giro, ti consiglio di cercare
"XmlHttpRequest" e non "AJAX", perché nel secondo caso potresti perderti nel
mare di informazioni discordanti e disordinate.
In questo NG troverai molte informazioni a riguardo, se cerchi negli archivi
di Google Groups.
Finita la (lunga) introduzione all'argomento, nella pratica il discorso
sarebbe il seguente:
Il tuo scopo è aggiornare il valore di due campi. Per fare questo non
utilizzare l'iframe, bensì scrivi i campi direttamente nella pagina. Quando
ti servirà aggiornarli, invocherai una richiesta HTTP tramite XmlHttpRequest
alla pagina che si preoccupa di recuperare i nuovi valori, e li imposterai
nei suddetti campi.
La realizzazione pratica della cosa dipende dai punti seguenti:
a) L'aggiornamento dei campi viene fatto ogni tot secondi, oppure "on
demand", ovvero tramite il click di un bottone e cose del genere?
b) Che linguaggio utilizzi lato server? Insomma, chi è che fornisce i dati
dei campi cambiati, e con quale criterio?
c) Hai detto che sei in una intranet: l'applicativo deve girare su più
browser, o solo su uno (ad esempio IE)?
L'ultima, più per completezza che per altro.
In ogni caso, per avere qualcosa da cui partire puoi dare un'occhiata a
questa semplice paginetta che ti ho fatto al volo:
 
http://st_fermat1/dev/xhr.php
Il codice PHP contenuto in tale pagina che si preoccupa di dare i valori è
il seguente:
<?php
	if ( $_SERVER["REQUEST_METHOD"] == "POST" ){
		echo "nuovo valore\r\n";
		echo "altro nuovo valore";
		die();
	}
?>
Come vedi, per amor di semplicità, non ho usato XML ho altro (per non
mettere troppa carne al fuoco, dato che ce ne è davvero già tanta), ma ho
semplicemente fatto un valore per riga.
Ovviamente il tutto è unicamente per darti una traccia sulla quale poter
lavorare.
Scusa la "lungaggine" del post, se tu dovessi aver qualche problema,
fischia. :)


 
Una possibilità consiste nel rispondere al submit del form con una pagina
che incorpori anche del codice javascript che: 1) aggiorni via DOM i
frammenti dalla pagina madre che devono cambiare e 2) rimuova l'iframe.
Se invece vuoi usare "ajax" (come va di moda chiamare 'ste cose), dovrai
scrivere del codice JS che 
 1) sottometta al server i campi del form tramite un oggetto XmlHttpRequest, 
 2) analizzi i dati dati restituiti dal server (che saranno nel formato che
avrai stabilito tu: XML, JSON, testo formattato come più ti piace, etc...), 
 3) usi tali dati per aggiornare via DOM i frammenti dalla pagina madre che
devono cambiare, 
 4) rimuova l'iframe
Ma a questo punto non ha più molto senso usare un iframe, perché puoi
mettere il form direttamente nella pagina, e rimuoverlo quando non serve
più.
Max
 

 stiamo parlando. Mettiti comoda.
LOL ho parlato troppo presto!


 browser, o solo su uno (ad esempio IE)?
a) l'aggiornamento dei campi viene fatto ondemand
b) lato server ho usato il php
c) si, sono in una intranet, e il programma deve girare su più
browser...
Grazie mille per la spiegazione.. vado un pò in giro per i group a
cercare info ;)
Sicuramente tornerò in questo post :)

 Sicuramente tornerò in questo post :)
Buono studio e buon sperimentazione, allora. :)


 LOL ho parlato troppo presto!
Lo so. :) Ma non volevo levarti quel breve attimo di illusione, dicendotelo.


 	
http://st_fermat1/dev/xhr.php
:( Non mi va...
Ho cercato un pò qua e un pò la...
Ho capito che con il mio caso c'entra dato che posso inviare valori
alla pagina php che sta sul server senza fare il refresh ogni volta
ma... come lo uso? In teoria ci sono ma in pratica mica tanto...

 ma... come lo uso? In teoria ci sono ma in pratica mica tanto...
La pagina in questione ti servirà per la pratica. Guarda il sorgente client
per capire come lavora; e riguardati il codice PHP che ti ho scritto due
post fa.


ZER0 ha scritto:
[cut]
Scusa.. approfitto un pò della tua pazienza... se posso...
Ho fatto varie prove... capito il.. "giochino" :) ma ora la difficoltà
aumenta... i campi che vado ad aggiornare sono delle select... ogni
volta che uno sceglie un valore il menu della select cambia... :( forse
lo dovevo dire prima... E' per questo che devo fare il refresh...

 lo dovevo dire prima... E' per questo che devo fare il refresh...
Ho modificato la paginetta di cui prima, il nuovo codice PHP te l'ho messo
direttamente là.
E' sempre a scopo "didattico", e l'ho fatta abbastanza di corsa, quindi è
ampiamente migliorabile (alcune delle migliorie te le ho elencate
precedentemente). Serve unicamente a illustrarti il processo generale.
Come vedi, i dati che lui utilizza sono "statici", ma nulla ti vieta
recuperarli da database o altro. Una volta che hai passato il valore
selezionato a PHP, puoi gestirtelo come meglio credi.
In questo caso ho preferito utilizzare XML per avere una gestione più
"pulita" e flessibile della cosa. Volendo ci sono altri diversi approcci per
raggiungere lo stesso scopo, senza XML. Ma, come ti ho detto, questa è una
traccia per aiutarti a capire il tutto; una volta appresi i concetti ti sarà
più facile modificare e migliorare il codice in base alle tue esigenze
(eventualmente con un piccolo supporto da parte di google)


 direttamente là.
Domani lo provo subito.. ti eleggerò mio salvatore ;)
Aby!

Grazie mille ZER0.. funziona tutto a dovere... quasi quasi mi metto e
cambio anche le altre paginette con il solito metodo ;)
Grazie :)
Aby!