Newsgroup: it.comp.lang.javascript
Titolo: submit di due form tramite javascript.

Nel mio file javascript ho:
 
$(document).on "click", "#document_template_session_btn", ->
     $("#document_template_session_frm").submit()
     $("#invite_frm").submit()
 
Cioe' all'on click faccio un submit di due form diverse.
E' corretto?
Succede una cosa strana e cioe' col codice di cui sopra sembra che il 
primo submit non funzioni, nel senso che il post viene eseguito ma i 
parametri non vengono valorizzati, cosa che non succede se non faccio 
eseguire il submit del secondo form ma soltanto il primo submit.


submit = cambio (o ricarico) pagina ... la logica è errata quindi, dato 
che vorresti cambiare 1 pagina in 2 pagine ...
 
Puoi usare xmlhttp.


Perdona l'ignoranza ma non ti ho capito.
Voglio fare il submit prima di un form e successivamente di un altro 
form all'onclick di un pulsante posto sul primo form.


Ho dimenticato di aggiungere che entrambi i submit vengono effettuati 
tramite ajax.

 posto sul primo form.
 
submit = cambio (o ricarico) pagina. Dopo il primo submit la pagina non è 
quindi più valida (o dopo il secondo, se il browser decide di eseguire 
comunque tutto lo script, ma in tal caso la chiamata alla prima pagina 
chissà cosa fa ...)
 
xmlhttp = "ajax"

 tramite ajax.
 
In generale non dovresti aver problemi. A me sembra che quelle due righe 
di codice che hai postato eseguano un normale submit, non una chiamata 
xmlhttp.


In realta' sto usando un framework, rubyonrails, le chiamate vengono 
effettuate tramite ajax.
Solo che il primo form, al submit chiama uno script che fa, ad esempio a=b.
Il submit del secondo form chiama un altro script che esegue altro codice.
Con i due submit uno dopo l'altro sembra che a=b non venga effettuato, 
mentre se evito di fare il secondo submit l'assegnazione va a buon fine.
Sinceramente non capisco.
 

 a buon fine. Sinceramente non capisco.
 
Io men che meno, capirai che con le due linee di codice che hai postato 
non si può capire che problemi hai ... e comunque a me sembra che quelle 
due linee eseguano un submit, e chiamando submit() via js l'onsubmit non 
viene eseguito, quindi non capisco come possa effettuare una chiamata 
ajax ...
 
Prova a mettere una callback alla prima chiamata, ed effettua da lì la 
seconda chiamata.

 a buon fine. Sinceramente non capisco.
 
Non conosco RoR, ma se il codice che hai postato e` una specie di 
templating system per jQuery, e la seconda e terza riga vengono copiate 
cosi` come sono, non stai per niente usando AJAX, ma fai due submti una 
dietro l'altra.
 
Se controlli via firebug (o la dev console di chrome) ti accorgerai che 
la prima chiamata viene abortita dopo un microsecondo, e viene eseguita 
la seconda. Per quello la prima non ha effetto.
 
La prossima volta, comunque, ti conviene postare il js che vedi nel 
sorgente della pagina, non quello che scrivi nei template, perche` i 
framework, 99 volte su 100, lo cambiano.
 
Bye.


Posto il sorgente della pagina:
 
il primo form e':
 
<form method="post" id="document_template_session_frm" 
data-remote="true" action="/document_template_sessions"
.
.
.
<a id="document_template_session_btn" class="btn btn-primary" 
href="javascript:void(0)">Invia</a>
 
Il secondo form e':
 
<form method="post" id="invite_frm" data-remote="true" 
action="/categorizations/invite"
.
.
.
 
Il javascript, jquery, e':
 
$(document).on("click", "#document_template_session_btn", function() {
       $("#document_template_session_frm").submit();
       $("#invite_frm").submit();
 

       $("#invite_frm").submit();
 
Se non c'è alcun codice di terze parti a modificare il comportamento del
metodo `submit` di jQuery, questo fa un banale submit delle form, che
non coinvolge assolutamente chiamate "ajax":
 
 
http://api.jquery.com/submit/
 
 
E spiegherebbe esattamente il comportamento che hai – e che ti hanno già
illustrato precedentemente.

 non coinvolge assolutamente chiamate "ajax":
 
Eppure con firebug sia per il primo submit che per il secondo negli 
header leggo:
 
X-Requested-With	XMLHttpRequest

 X-Requested-With    XMLHttpRequest
 
Il che significa che c'è un codice di terze parti a modificare il
comportamento del metodo `submit` di jQuery – oppure a intercettare il
submit di ogni form, e cancellare il comportamento di default del
browser – perché da quanto vedo dalla documentazione di jQuery, e come
puoi vedere tu stesso, sembra unicamente invocare il submit di una form,
niente chiamate "ajax".


L'header conferma che i due submit vengono chiamati tramite ajax, 
percio' continuo a non capire perche' il primo non funziona se chiamo 
anche il secondo mentre funziona se il secondo submit non viene chiamato.

 anche il secondo mentre funziona se il secondo submit non viene chiamato.
 
Finché non capirai "chi" fa questa operazione, non potrai capire come
sistemarlo. Non è jQuery, perché di suo jQuery con quel metodo
chiamerebbe il normale submit di una form. Non è certo il browser.
Quindi quale altro codice hai, tuo o di terzi, che potrebbe metterci lo
zampino? Un qualche plug-in per jQuery?
Una volta che sai chi è che sta cambiando le carte in tavola, sai dove
guardare, e potrai anche cercare un rimedio. Fino ad allora non puoi
fare un granché.
Una spiegazione plausibile è che, chiunque stia sovrascrivendo il
normale comportamento di submit delle form – in jQuery o nel browser –
stia usando lo stesso oggetto XMLHttpRequest: se così fosse, le
precedenti chiamate XMLHttpRequest verrebbero abortite automaticamente,
quindi se fai tre submit solo l'ultimo avviene effettivamente. Oppure,
che usino oggetto XMLHttpRequest diversi, ma che abortiscano manualmente
a ogni chiamata di `submit` l'eventuale in progress.
 
Il succo rimane lo stesso: non è il normale comportamento del browser,
non è il normale comportamento di jQuery, quindi il codice che ci hai
fornito non identifica il "colpevole".