2013-07-05 10 views
10

Dużo przeszukuję, ale nie znalazłem idealnej różnicy między metodą jquery a serialize i serializeObject.Różnica między serializacją a serializacjąObject jquery

Proszę, pomóżcie mi to zrozumieć.

+2

jQuery ma metodę o nazwie 'serializeObject' w jej rdzeniu. Jeśli widzisz, że używasz tego, prawdopodobnie jest to wtyczka i prawdopodobnie robi to samo co 'serializowanie' – SpYk3HH

+0

O ile mi wiadomo' serializeObject' nie jest funkcją rdzeniową jquery, więc najpierw musisz nam powiedzieć gdzie czy dostałeś tę wtyczkę, ale w każdym razie nie myśl, że warto to porównać. –

+0

Więcej informacji można znaleźć [*** tutaj ***] (http://stackoverflow.com/questions/8900587/jquery-serializeobject-is-not-a-function-only-in-firefox) – SpYk3HH

Odpowiedz

24

Jak widać here, serializeObject nie jest natywną metodą jQuery i dlatego istnieje tylko wtedy, gdy wstawiłeś go wcześniej lub poprzedni programista witryny. Jak wspomniano w Q&A found here, funkcja ta została prawdopodobnie znaleźć, gdy ktoś pracuje na swoim miejscu „searched a way to serialize a form” i znalazłem następujące rozszerzenia:

$.fn.serializeObject = function() 
{ 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() { 
     if (o[this.name]) { 
      if (!o[this.name].push) { 
       o[this.name] = [o[this.name]]; 
      } 
      o[this.name].push(this.value || ''); 
     } else { 
      o[this.name] = this.value || ''; 
     } 
    }); 
    return o; 
}; 

Look dla serializeObject gdzieś w JS, ale należy pamiętać, to prawdopodobnie nie potrzebne jako to jest wydaje się robić to samo, co $.fn.serialize .


Po dokładniejszym sprawdzeniu okazało się, że to nie to samo. serializeObject metoda znaleziona w innym Q & A będzie serializować wartość formularza jako Obiekt, podczas gdy serialize koduje wartości jako ciąg do przesłania.

Proszę zwrócić uwagę, jeśli chcesz coś jak serailizeObjectże pochodzi z jQuery Rdzenia, to proszę zobaczyć serializeArray.

Wynik będzie nieco inny, ponieważ serializeArray stworzy tablicę obiektów wartości twojego formularza. Każdy obiekt mający { name: "", value: "" }

EXAMPLE

proszę zobaczyć DeveloperToolsConsole w przykładzie.

+0

Powinieneś użyć 'if (o.hasOwnProperty (this.name)) zamiast' if (o [this.name]) '. Jeśli pierwsze wejście poza grupą o tej samej nazwie "nazwa" jest puste, drugim wariantem będzie "fałsz". –

+0

@MaximPechenin: Jeśli przeczytasz pytanie i odpowiedź, przekonasz się, że nie napisałem tej metody. Po prostu odwołuję się do tego, ponieważ jest to najpopularniejsza forma, jaką mogę znaleźć w Internecie. Chodzi o to, aby pomóc OP określić, gdzie może być metoda, która powodowała zakłócenia. – SpYk3HH

3

$.serializeObject jest wariantem istniejący $.serialize metodę, która, zamiast kodowania elementów formularza do łańcucha, konwertuje elementy formularza do ważnego JSON obiektu, który może być używany w aplikacji JavaScript.

2

zrobiłem kilka kopanie tutaj na stackoverflow na szeregowania formularz do obiektu json i skończyło się znalezieniem tej metody

$.fn.serializeObject = function() 
{ 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() { 
     if (o[this.name]) { 
      if (!o[this.name].push) { 
       o[this.name] = [o[this.name]]; 
      } 
      o[this.name].push(this.value || ''); 
     } else { 
      o[this.name] = this.value || ''; 
     } 
    }); 
    return o; 
}; 

jeszcze nie pasuje na co byłem w pracy. Stworzyłem więc własną wtyczkę. Jeśli zainteresowany może co to sprawdzić https://github.com/citnvillareal/serializeObject

1

Myślę, że to prosty sposób! TODO--

$.fn.serializeObject = function() { 
     var o = {}; 
     this.find("[name]").each(function() { 
      o[this.name] = this.value; 
     }); 
     return o; 
    };