Przekaż cały formularz jako dane w funkcji jQuery Ajax
155
Mam funkcję jQuery ajax i chciałbym przesłać cały formularz jako dane pocztowe. Stale aktualizujemy formularz, więc ciągłe aktualizowanie danych wejściowych formularza, które powinny być wysyłane w żądaniu, staje się uciążliwe.
Moh ma rację co do FormData () i obrazów. Ale żeby wyjaśnić dalej. Chodzi o to, że serializacja działa tylko na łańcuchach (nie na danych binarnych). funkcja FormData () działa z formularzami, których typ kodowania jest ustawiony na „multipart / form-data”. Szczegóły tutaj: developer.mozilla.org/en-US/docs/Web/API/FormData
$ .post może również wywołać funkcję w przypadku sukcesu. $ .post ('url', dane, funkcja () {....});
slm
22
uwaga: pola formularza muszą mieć ustawiony atrybut nazwy, używanie samego ID nie działa zgodnie z dokumentacją i jak się dowiedziałem z pierwszej ręki.
Lance Cleveland
czego potrzebuję jakieś dane wejściowe o tej samej nazwie ? To znaczy, jakbyś miał je w rzędach? jak mogę wysłać to w tablicy czy coś?
Francisco Corrales Morales
2
@FranciscoCorralesMorales nazwij swoje dane wejściowe w ten sposób:person[0].firstNameperson[0].lastNameperson[1].firstNameperson[1].lastName
ahmehri
@ahmehri, czy to jest prawidłowy kod HTML <input name="person[1].lastName">?
Francisco Corrales Morales
58
serialize () nie jest dobrym pomysłem, jeśli chcesz wysłać formularz metodą post. Na przykład, jeśli chcesz przekazać plik przez ajax, to nie zadziała.
Załóżmy, że mamy formularz o tym id: „myform”.
lepszym rozwiązaniem jest zrobienie FormData i wysłanie go:
var myform = document.getElementById("myform");var fd =newFormData(myform );
$.ajax({
url:"example.php",
data: fd,
cache:false,
processData:false,
contentType:false,
type:'POST',
success:function(dataofconfirm){// do something with the result}});
Tak, jest obsługiwany przez zaktualizowane przeglądarki, ale używając serializacji można przekazywać tylko ciągi.
Moh Arjmandi,
4
Może powinieneś wspomnieć o tym w swojej odpowiedzi
toesslab
Dziękuję za jedno vari drugie w 2016 roku!
Sylar
1
jesteś piękna! działało jak urok (dane formularzy + przesyłanie plików)
saibbyweb
2
nie mogę tego wystarczająco podkreślić! próbowałem, form.serialize()ale po prostu nie działało w przypadku przesyłania plików. new FormData(this)działało ładnie
Sasanka Panguluri
26
Ogólnie używane serialize()w elemencie formularza.
Należy pamiętać, że wiele opcji <select> jest serializowanych pod tym samym kluczem, np
spowoduje powstanie ciągu zapytania zawierającego wiele wystąpień tego samego parametru zapytania:
[path]?foo=1&foo=2&foo=3&someotherparams...
co może nie być tym, czego oczekujesz od zaplecza.
Używam tego kodu JS, aby zredukować wiele parametrów do pojedynczego klucza oddzielonego przecinkami (bezwstydnie skopiowanego z odpowiedzi komentatora w wątku u Johna Resiga):
function compress(data){
data = data.replace(/([^&=]+=)([^&]*)(.*?)&\1([^&]*)/g,"$1$2,$4$3");return/([^&=]+=).*?&\1/.test(data)? compress(data): data;}
co zamienia powyższe w:
[path]?foo=1,2,3&someotherparams...
W swoim kodzie JS nazwałbyś to tak:
var inputs = compress($("#your-form").serialize());
Aby wyodrębnić adres URL z atrybutu „action” formularza, użyj url: $(this).attr('action'),zamiast tego
rubo77
1
Musisz tylko opublikować dane. i Używanie parametrów zestawu funkcji jquery ajax. Oto przykład.
<script>
$(function(){
$('form').on('submit',function(e){
e.preventDefault();
$.ajax({
type:'post',
url:'your_complete url',
data: $('form').serialize(),
success:function(response){//$('form')[0].reset();// $("#feedback").text(response);if(response=="True"){
$('form')[0].reset();
$("#feedback").text("Your information has been stored.");}else
$("#feedback").text(" Some Error has occured Errror !!! ID duplicate");}});});});</script>
Odpowiedzi:
Jest funkcja, która robi dokładnie to:
http://api.jquery.com/serialize/
źródło
person[0].firstName
person[0].lastName
person[1].firstName
person[1].lastName
<input name="person[1].lastName">
?serialize () nie jest dobrym pomysłem, jeśli chcesz wysłać formularz metodą post. Na przykład, jeśli chcesz przekazać plik przez ajax, to nie zadziała.
Załóżmy, że mamy formularz o tym id: „myform”.
lepszym rozwiązaniem jest zrobienie FormData i wysłanie go:
źródło
var
i drugie w 2016 roku!form.serialize()
ale po prostu nie działało w przypadku przesyłania plików.new FormData(this)
działało ładnieOgólnie używane
serialize()
w elemencie formularza.Należy pamiętać, że wiele opcji <select> jest serializowanych pod tym samym kluczem, np
spowoduje powstanie ciągu zapytania zawierającego wiele wystąpień tego samego parametru zapytania:
co może nie być tym, czego oczekujesz od zaplecza.
Używam tego kodu JS, aby zredukować wiele parametrów do pojedynczego klucza oddzielonego przecinkami (bezwstydnie skopiowanego z odpowiedzi komentatora w wątku u Johna Resiga):
co zamienia powyższe w:
W swoim kodzie JS nazwałbyś to tak:
Mam nadzieję, że to pomoże.
źródło
Posługiwać się
serialize ()
Serializuj formularz do ciągu zapytania, który może zostać wysłany do serwera w żądaniu Ajax.
źródło
Dobrą opcją jQuery do tego jest użycie FormData . Ta metoda jest również przydatna podczas wysyłania plików przez formularz!
Twoja funkcja wysyłania w jQuery wyglądałaby tak:
aby dodać dane do formularza, możesz użyć ukrytych danych wejściowych w formularzu lub dodać je w locie:
źródło
url: $(this).attr('action'),
zamiast tegoMusisz tylko opublikować dane. i Używanie parametrów zestawu funkcji jquery ajax. Oto przykład.
źródło
Inne rozwiązania nie działały dla mnie. Może stary DOCTYPE w projekcie, nad którym pracuję, blokuje opcje HTML5.
Moje rozwiązanie:
js:
źródło