Perché 'jQuery.parseJSON' non è necessario?

sto facendo una richiesta ajax con query e chiedo perché la mia risposta sia già un object JS.

Se faccio a

var obj = jQuery.parseJSON(response); 

'obj' è nullo, ma posso usare 'risposta' come una serie di oggetti js.

Questo non è davvero un problema, ma vorrei capire questo comportmento.

Grazie

Ciò avviene quando si effettua una chiamata AJAX e specifica le jQuery jQuery.parseJSON dei dati jType JSON jQuery sulla risposta per voi. In realtà è ansible specificare quale function da call a seconda del tipo di dati come si può dalla documentazione

convertitori (aggiunto 1.5)
Mappa predefinita: {"* text": window.String, "text html": true, "text json": jQuery.parseJSON, "text xml": jQuery.parseXML} Una mappa dei convertitori dataType-to-dataType. Il valore di each converter è una function che restituisce il valore trasformato della risposta

Quindi se fai una chiamata come questa

 $.ajax({ url: yoururl, dataType: "json", success: function(data){ //data is already a json } 

Se non si specifica un dataType che jQuery tenta di indovinare

dataTypeString Predefinito: Guess intelligente (xml, json, script o html)

Il tipo di dati che si prevede di tornare dal server. Se nessuno è specificato, jQuery cercherà di dedurlo in base al tipo MIME della risposta (un tipo XML MIME produrrà XML, in 1,4 JSON produrrà un object JavaScript, nello script 1,4 eseguirà lo script e tutto il resto sarà restituito come una string). I tipi disponibili (e il risultato passato come primo argomento per il richiamo di successo) sono:

"xml": restituisce un documento XML che può essere elaborato tramite jQuery.
"html": restituisce l'HTML come text normale; i tag di script inclusi vengono valutati quando inseriti nel DOM. "script": Valuta la risposta come JavaScript e lo restituisce come text normale. Distriggers la cache mediante l'aggiunta di un parametro di string di query " = [TIMESTAMP]" all'URL, a less che l'opzione di cache non sia impostata su true. Nota: questo trasformsrà i POST in GET per le richieste di dominio remoto. "json": Valuta la risposta come JSON e restituisce un object JavaScript. In jQuery 1.4 i dati JSON vengono analizzati in modo rigoroso; qualsiasi JSON malformato viene rifiutato e viene generato un errore di analisi. (Vedi json.org per ulteriori informazioni sulla formattazione JSON corretta.)
"jsonp": carica in un block JSON utilizzando JSONP. Aggiunge un ulteriore "? Callback =?" alla fine dell'URL per specificare la richiamata. Distriggers la cache mediante l'aggiunta di un parametro di string di query " = [TIMESTAMP]" all'URL, a less che l'opzione di cache non sia impostata su true.
"text": una string di text normale. valori multipli, separati da spazio:
A partire da jQuery 1.5, jQuery può convertire un dataType da ciò che ha ricevuto nell'intestazione Content-Type a quello che ti serve. Ad esempio, se si desidera che una risposta di text venga trattata come XML, utilizzare "text xml" per il tipo di dati. Puoi anche fare una richiesta JSONP, ricevere come text e interpretare da jQuery come XML: "jsonp text xml". Allo stesso modo, una string di stenografia come "jsonp xml" prima cercherà di convertire da jsonp a xml e, in caso contrario, convertirlo da jsonp a text e quindi da text a xml.

Dipende praticamente da quali dataType si passano nella tua richiesta jQuery ajax. Questo potrebbe accadere implicando chiamando .getJSON() o direttamente utilizzando $.ajax() .

Tuttavia, se si omette il tipo di dataType , jQuery dataType di eseguire alcune magie e indovina quali dati sono stati ricevuti. Per quanto riguarda i dati JSON, utilizza un'espressione regolare semplice per verificare se una risposta sia come una string JSON e, in caso affermativo, lo analizza automaticamente per te. jQuery cercherà di dedurlo in base al tipo MIME della risposta.

Quindi sempre essere precisi e dire jQuery quale tipo di dati si prevede.

Il comportmento predefinito del metodo ajax di jQuery è quello di analizzare la risposta e restituirlo come il tipo di dati più appropriato. Se la tua risposta sembra JSON, quindi, verrà convertita in un object / arrays JavaScript.

È ansible ignorare questo comportmento impostando l'attributo dataType nelle impostazioni ajax.

se si specifica il dataType come json il jquery analizza la risposta che ti piace

 $.ajax({ ... dataType:'json', ... }); 

lo stesso è il caso di jQuery.getJSON ()

come è il codice sorgente di getJSON

 getJSON: function( url, data, callback ) { return jQuery.get( url, data, callback, "json" ); }, 

https://github.com/jquery/jquery/blob/master/src/ajax.js#L283

Perché

 jQuery.ajaxSettings.converters["text json"] === jQuery.parseJSON 

IE eseguirà la function each volta che la risposta di json viene rilevata automaticamente o esplicitamente impostata da soli