¿Por qué no es necesario 'jQuery.parseJSON'?

Estoy haciendo una request de Ajax con una consulta y me pregunto por qué mi respuesta ya es un object JS.

Si hago un

var obj = jQuery.parseJSON(response); 

'obj' es nulo, pero puedo usar 'response' como una matriz de objects js.

Esto no es realmente un problema, pero me gustaría entender este comportamiento.

Gracias

Esto sucede cuando realiza una llamada AJAX y especifica el tipo de datos JSON jQuery llama a jQuery.parseJSON sobre la respuesta por usted. De hecho, puede especificar a qué function llamar dependiendo del tipo de datos, como puede ver en la documentation

convertidores (agregado 1.5)
Pnetworkingeterminado del map: {"* text": window.String, "text html": true, "text json": jQuery.parseJSON, "text xml": jQuery.parseXML} Un map de los convertidores dataType-to-dataType. El valor de cada convertidor es una function que devuelve el valor transformado de la respuesta

Entonces, si haces una llamada como esta

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

Si no especifica un tipo de datos jQuery intenta adivinarlo

dataTypeString Valor pnetworkingeterminado: Intelligent Guess (xml, json, script o html)

El tipo de datos que espera del server. Si no se especifica ninguno, jQuery intentará inferirlo basándose en el tipo MIME de la respuesta (un tipo MIME XML arrojará XML, en 1.4 JSON arrojará un object JavaScript, en 1.4 script ejecutará el script, y cualquier otra cosa será devuelto como una cadena). Los types disponibles (y el resultado pasado como el primer argumento para su callback exitosa) son:

"xml": devuelve un documento XML que se puede procesar a través de jQuery.
"html": devuelve HTML como text sin formatting; las tags de script incluidas se evalúan cuando se insertan en el DOM. "script": evalúa la respuesta como JavaScript y la devuelve como text sin formatting. Inhabilita el almacenamiento en caching agregando un parámetro de cadena de consulta, " = [TIMESTAMP]", a la URL a less que la opción de caching se establezca en verdadero. Nota: Esto convertirá las POST en GET para requestes de dominio remoto. "json": Evalúa la respuesta como JSON y devuelve un object JavaScript. En jQuery 1.4, los datos JSON se analizan de manera estricta; cualquier JSON malformado es rechazado y se produce un error de análisis. (Consulte json.org para get más información sobre el formatting JSON adecuado).
"jsonp": se carga en un bloque JSON utilizando JSONP. Agrega un extra "? Callback =?" hasta el final de su URL para especificar la callback. Inhabilita el almacenamiento en caching agregando un parámetro de cadena de consulta, " = [TIMESTAMP]", a la URL a less que la opción de caching se establezca en verdadero.
"text": una cadena de text sin formatting. valores múltiples separados por espacios:
A partir de jQuery 1.5, jQuery puede convertir un tipo de datos de lo que recibió en el encabezado Content-Type a lo que necesita. Por ejemplo, si desea que una respuesta de text se trate como XML, use "text xml" para el dataType. También puede realizar una request JSONP, recibirla como text e interpretarla por jQuery como XML: "jsonp text xml". Del mismo modo, una cadena abreviada como "jsonp xml" primero intentará convertir de jsonp a xml y, en su defecto, convertir de jsonp a text, y luego de text a xml.

Depende mucho de qué tipo de datos dataType a su request jQuery ajax. Esto puede ocurrir implicto llamando a .getJSON() o directamente usando $.ajax() .

Sin embargo, si omite el tipo de datos, jQuery intenta hacer algo de magia y adivina qué datos se recibieron. En cuanto a los datos JSON, utiliza una expresión regular simple para comprobar si una respuesta se parece a una cadena JSON y, si es así, la analiza automáticamente. jQuery intentará inferirlo en function del tipo MIME de la respuesta.

Por lo tanto, siempre sea preciso y cuéntele a jQuery qué tipo de datos espera.

El comportamiento pnetworkingeterminado del método ajax de jQuery es analizar la respuesta y devolverla como el tipo de datos más apropiado. Si su respuesta se parece a JSON, por lo tanto, se convertirá en un object / matriz de JavaScript.

Puede anular este comportamiento configurando el atributo dataType en la configuration de ajax.

si especifica el tipo de datos como json el jquery analiza la respuesta que le gusta

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

lo mismo es el caso con jQuery.getJSON ()

Así es como se ve el código fuente de getJSON

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

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

Porque

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

IE ejecutará la function cada vez que la respuesta json sea detectada automáticamente o explícitamente por usted mismo