2013-07-05 15 views
10

Ho cercato molto ma non ho trovato la differenza perfetta tra il metodo serialize e il metodo serializeObject di jquery.Differenza tra serialize e serializeObject jquery

Per favore aiutami a capire questo.

+2

jQuery non ha un metodo chiamato 'serializeObject' nel suo nucleo. Se stai vedendo l'uso di questo, probabilmente è in un plugin e probabilmente fa la stessa cosa di 'serialize' – SpYk3HH

+0

Per quanto ne so,' serializeObject' non è una funzione jquery principale quindi prima devi dirci dove hai avuto quel plugin, ma in ogni caso, non credo valga la pena il confronto. –

+0

Ulteriori informazioni possono essere trovate [*** qui ***] (http://stackoverflow.com/questions/8900587/jquery-serializeobject-is-not-a-function-only-in-firefox) – SpYk3HH

risposta

24

Come si può vedere here, serializeObject non è un metodo jQuery nativo e quindi esiste solo se l'utente o un programmatore precedente del sito l'ha inserito. Come è menzionato in un Q&A found here, questa funzione è stata probabilmente trovata quando qualcuno che lavora sul tuo sito "searched a way to serialize a form" e ha trovato la seguente estensione:

$.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; 
}; 

Cercare serializeObject da qualche parte nel vostro JS, ma nota, è probabilmente non necessario in quanto it sembra fare la stessa cosa di $.fn.serialize .


Su ulteriore revisione, ho trovato che non è esattamente la stessa. serializeObject metodo trovato in altri Q & Un serializzare del valore di un modulo come un oggetto, mentre serialize codifica i valori come una stringa di presentazione.

prega di prendere nota, se si desidera qualcosa come serailizeObjectche è nativo del jQuery Nucleo, quindi si prega di consultare serializeArray.

Il risultato sarà leggermente diverso in quanto serializeArray creerà una matrice di oggetti dei valori del modulo. Ogni oggetto ha { name: "", value: "" }

EXAMPLE

Si prega di vedere DeveloperToolsConsole nell'esempio.

+0

Si dovrebbe usare 'if (o.hasOwnProperty (this.name))' invece di 'if (o [this.name])'. Se il primo input di un gruppo con la stessa proprietà 'name' è vuoto, la seconda variante sarà' false'. –

+0

@MaximPechenin: Se leggi la domanda e la risposta, scoprirai che non ho scritto quel metodo. Lo riferimento semplicemente come è la forma più popolare che potrei trovare in linea. Quel punto era di aiutare l'OP a identificare dove poteva essere un metodo che causava interferenze. – SpYk3HH

3

$.serializeObject è una variante di $.serialize metodo che, invece di codificare elementi di forma a stringa, converte elementi del modulo a un oggetto valido JSON che può essere utilizzato nell'applicazione JavaScript esistente.

2

ho fatto un po 'scavare qui su StackOverflow su serializzazione modulo per oggetto JSON e ho finito per trovare questo metodo

$.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; 
}; 

ancora non si adatta a quello che stavo lavorando. Così ho creato il mio plugin. Se il vostro interesse si potrebbe cosa controllare questo fuori https://github.com/citnvillareal/serializeObject

1

penso che questo è il modo semplice! TODO--

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