Newsgroup: it.comp.lang.javascript
Titolo: invio ajaxForm e azione sulla pagina

Salve a tutti, mi auguro stiate bene. 
 
Di me posso dirvi che quando frequentavo iclj avevo la barba e i capelli
di tutt'altro colore. Per il resto boh, non lamentiamoci; diciamo che
seddiov�le ho trovato un motivo per rimettere le mani al javascript,
quindi per venirvi a subissare di domande. 
Felici? :-)
 
Situazione:
 
- dalla pagina Pippo.php invio un form per mezzo del plugin jquery 
  cosiddetto ajaxForm
 
- l'action punta alla pagina Pluto.php
 
- tutto ok. L'output prodotto da Pluto se ne va dritto nel <div
id="ficca">, nessun problema.
 
Ora, per�, gli output di Pluto possono essere di vario genere;
ipotizziamo un output_A e un output_B, a seconda di come agisce
l'utente.
 
Quando l'output di Pluto � A non deve succedere niente, quando � B
vorrei che su Pippo avvenisse qualcosa, diciamo il reset del form.
Ovviamente - questo lo sapete meglio di me - Pippo � inconsapevole di
ci� che ha prodotto Pluto. 
 
Non so come ci si comporta in casi come questo, non ne ho la pi� pallida
idea; fatto sta che ho voluto fare un tentativo. All'output_B di Pluto
ho aggiunto:
 
<script>
alert('salute');
</script>
 
... e miracolosamente ho visto l'alert. Non me l'aspettavo. 
 
Il passo successivo � stato ovvio: 
 
- in Pippo.php ho inserito la function Resetta() { istruzioni }
 
- in Pluto.php ho aggiunto la chiamata:
 
<script>
Resetta();
</script>
 
E FUNGE! Va ch'� una bellezza.
 
'nsomma... "va ch'� una bellezza" lo dico io che l'ho testato in locale
e su due soli browser; non so se funziona sempre e comunque. Soprattutto
non so se il mio � da considerarsi un buon criterio operativo o una
volgare chiavica informatica. 
Che ne dite, secondo voi pu� andare? Esistono metodi pi� professionali
per raggiungere lo stesso scopo?
 
Grazie a tutti.
 
-- 
mailto: y = i
------------------------------------------------------
http://www.catarsi.it
 
Vivo nel terrore di non essere frainteso (Oscar Wilde)

 per raggiungere lo stesso scopo?
 
Premetto che non so che sia il plugin ajaxForm e rispondo a naso 
seguendo quel che scrivi.
 
Idealmente le chiamate "ajax" dovrebbero scambiarsi solo dati e non 
istruzioni, altrimenti diventa complicato gestire la logica che verrebbe 
sparpagliata tra client e server ma al di fuori delle loro aree di 
competenza.
 
Un modo comune e semplice di scambiarsi dati � JSON.
 
Fai la chiamata, server risponde, a seconda di quel che lui dice agisci.
 
Dimmi se � bastato a metterti in moto gli ingranaggi o se son stato 
troppo frettoloso.
 
A presto in ogni caso.
 
 

 troppo frettoloso.
 
Per niente frettoloso, era ci� che mi serviva. Vado a leggere qualcosa
su JSON, grazie.
 
A presto!


 A presto!
 
Ecco, una cosa l'ho dimenticata. Non sto ad aprire un nuovo thread,
tanto credo sia veloce; e in fondo rimango quasi in tema.
 
Sebbene la rete pulluli di tutorial sul cosiddetto ajax, c'�
un'informazione che non ho trovato da nessuna parte. Vado di domanda.
 
In termini di quantit� (ripeto, di *quantit�*), fino a che punto � da
considerarsi ragionevole scrivere dinamicamente in un oggetto del DOM?
 
Non saprei spiegarvene il motivo, ma finora mi sono ben guardato da fare
una cosa del genere:
 
obj.innerHTML= 1 MB di html
 
la sensazione � quella che il contenitore "esploda". Ma sono quelle idee
fondate sul niente, o forse su antiche esperienze di browser che
accettavano 
 
var Ciao_mondo="<b>ciao mondo</b>";
obj.innerHTML=ciao_mondo 
 
e si piantavano se al posto di Ciao_mondo c'era L_Eneide.
 
Oggi come siamo messi? via "ajax" si pu� scrivere L_Eneide in un div?
 
Ri-grazie.


 Oggi come siamo messi? via "ajax" si può scrivere L_Eneide in un div?
 
Se lo fai a pezzettini sì, altrimenti avrai in memoria due (o più) copie 
dell'Eneide: una come testo/json/xml ricevuta da AJAX e una nel DOM. 
Altre copie eventuali sono nei buffer del S.O. e del browser. :)
 
Bye.

 dell'Eneide:
 
No, scusa, qui non credo di aver capito: i "pezzettini" mi confondono le
idee.
 
Esemplifichiamo. L'Eneide (intera) � questa: "Canto le armi e l'eroe".
Dal server ho facolt� di prenderla tutta in un colpo o pezzo per pezzo.
 
[spero tu legga con un font monospaziato]
 
Caso A (tutta intera):
 
db -> php -> html("Canto le armi e l'eroe") -----+
                                                 |
<div id="eneid">                                 |
              <----------------------------------+
</div>
 
 
Caso B (pezzo per pezzo):
 
db -> php -> html("Canto le armi") ------------+
                                               |
db -> php -> html_APPENDO(" e l'eroe") --+     |
                                         |     |
<div id="eneid">                         |     |
              <--------------------------+-----+
                                         |
              <--------------------------+
</div>
 
 
E' questo di cui parlavi? Se s�, avendo un testo molto ampio, �
preferibile servirsi di A o di B?
 
Grazie e scusa se per esprimere i concetti devo ricorrere ai disegnini,
ma ho l'attenuante di essere ancora in tenera et� ^__-


 preferibile servirsi di A o di B?
 
Sì. Dipende dal contesto.
 
Il caso A fa una sola connessione HTTP, quindi oltre ad avere solo una 
volta l'overhead del TCP e dell'HTTP (handshake, lancio del processo sul 
server, recupero dati sul server, ecc.) sfrutti anche la scaling window 
del TCP (più grosso è il file più grossi diventano i pacchetti, quindi 
hai meno ACK e la velocità aumenta).
 
Ma, nel preciso quanto di tempo in cui hai finito il download via ajax, 
hai in RAM tutto il tuo testo (diciamo 1 MB). Quando fai $(bla).innerHtml
(eneide) hai in RAM eneide (1 MB) più il DOM (1 MB), quindi occupi 2 MB, 
oltre alla bitmap del testo renderizzato a schermo (probabilmente siamo 
sui 200 MB :D)
 
Nel caso B diciamo che lo spezzi in 200 KB alla volta. Ti trovi con, in 
ordine di "fine download del pezzo", in RAM:
 
1 - 200 KB (variabile) + 200 KB (testo nel DOM)
2 - 200 KB + 400 KB
3 - 200 KB + 600 KB 
4 - 200 KB + 800 KB 
5 - 200 KB + 1000 KB 
6- (parte la pulizia) 0 KB + 1000 KB
 
In pratica al massimo occupi 1200 KB invece di 2000.
 
Fermo restando i 200 MB di bitmap che il browser deve tenere in RAM per 
l'eneide renderizzata a 24bit per pixel col tuo google font e il text-
shadow. :D
 
Quindi direi che non ti dovresti preoccupare più di tanto. Quello che 
occupa di più è la rappresentazione a schermo.
 
L'ideale, in tutte le situazioni, è fare come fanno gli epub: metti un 
HTML per capitolo, e renderizzi solo quello. Quando cambi capitolo, una 
botta di AJAX, scarichi il capitolo nuovo, rimuovi dal DOM quello vecchio 
e lo sovrascrivi col nuovo (eventualmente con qualche effetto grafico che 
fa figo)
 
Bye.

 wrote:
 
[post talmente curato che dispiace snipparlo]
 
Limpido, esauriente e dettagliato. Che voglio di pi�? In casi come
questo si � soliti dire "ti devo una birra", ma qui t'andrebbe come
minimo offerta l'Oktoberfest.   
 
Grazie infinite, a presto! ^__-
