2012-02-16 12 views
7

Ho un modulo HTML esistente che sto cercando di aggiornare per utilizzare jQuery.load(). Come posso passare tutti gli elementi del modulo come parametri POST piuttosto che dover specificare quali parametri passare?jquery.load() per POST tutti gli elementi di un modulo piuttosto che dover specificare cosa POST

Gli elementi del modulo vengono creati dinamicamente da uno script e il numero di elementi e il nome degli elementi variano considerevolmente nella misura in cui non è pratico specificare quali parametri passare tramite AJAX/POST. C'è un modo semplice per passare a jQuery.load() tutti gli elementi all'interno dei tag <form></form> come se il modulo fosse presentato tradizionalmente?

risposta

18

È possibile utilizzare .serialize() per serializzare tutti gli input del modulo per l'invio insieme alla chiamata jQuery.load().

$('form').serialize() 

Ad esempio, utilizzando jQuery.load() (solo fa arrivare a meno che non si passa un oggetto per i dati, poi POST)

$.load(
    'postTo.php', 
    $('#yourFormId').serialize(), 
    complete(responseText, textStatus, XMLHttpRequest){ 
     //do your processing after the fact 
})) 

Utilizzando, jQuery.ajax(), si può rendere POST

$.ajax({ 
    'url': 'postTo.php', 
    'type': 'POST', 
    'data': $('#yourFormId').serialize(), 
    'success': function(result){ 
     //process here 
    } 
}); 

Vedi: http://api.jquery.com/jQuery.ajax/

+0

Come posso applicare questo in un modo che duplichi la normale funzionalità di invio di un modulo utilizzando POST? Sto cercando di ottenere i risultati nello stesso formato ($ _POST) array, che contiene array annidati. –

+0

Ah, non potrai 'POST' con' load() 'dato che usa' GET'. Dovrai usare '$ .ajax' o qualcos'altro per cambiare il metodo in' POST'. Aggiornerò il mio post originale per mostrarlo. – derekaug

+1

Hai mai pensato di utilizzare $ .post()? –

25

Easy: quando si raccolgono i dati del modulo e lo si passa come secondo parametro su load(), utilizzare serializeArray(data) e non utilizzare serialize(data), come raccomandato dalla risposta attualmente accettata.

serialize() restituisce una stringa, mentre serializeArray() restituisce un oggetto. load() invia un POST se i dati sono un oggetto. Se i dati sono una stringa, load() invia un GET.

+2

Questa dovrebbe essere la risposta giusta. – user2233706

+0

entrambe le risposte hanno aiutato molto. Usando $ .load è stato possibile cambiare il div specificato, usando la chiamata ajax molto facilmente, ma non è stato possibile trovare lo stesso modo di farlo in $ .ajax. – Babulu

Problemi correlati