2009-07-03 36 views
25

¿Hay realmente una diferencia en estas dos llamadas? Si usa getJSON, todavía tiene que declarar format=json en la url ...

Y puede hacer lo mismo en $.get(), e iterar a través del objeto JSON.

¿O estoy lejos de aquí?

+0

Lo que debe declarar en la URL no tiene nada que ver con jQuery. Tampoco sería ese el caso para todos los sitios, ciertamente no para uno de los míos ;-) – NickFitz

+0

Solo decía que tienes que declarar en la url que estás buscando un resultado JSON, incluso si estás usando getJSON. Y lo declararías en la url por $ .get() también. Me pregunto qué hace uno, que el otro no ... – peirix

+0

En realidad ** está ** fuera de la pista aquí. al utilizar el método ** getJSON() **, ** NO ** tiene que aprobar explícitamente el tipo de datos, pero en el método ** get() ** tendrá ** de manera EXPECTABLE HASTA **. Mira el comentario anterior por yehuda. Cuenta toda la historia o visita [http://api.jquery.com/jQuery.getJSON/](http://api.jquery.com/jQuery.getJSON/) – kushalvm

Respuesta

43

Los siguientes dos fragmentos son equivalentes:

$.get("/some/url", {data: "value"}, function(json) { 
    // use json here 
}, "json") 

$.getJSON("/some/url", {data: "value"}, function(json) { 
    // use json here 
}); 

decir que una solicitud es para JSON significa dos cosas:

  • jQuery envía un encabezado Accept: application/json
  • jQuery interpreta la respuesta entrante, la convierte en un objeto de JavaScript, y lo pasa a la devolución de llamada (para que no tenga que meterse con eval u otro mecanismo de conversión).

Varias infraestructuras del lado del servidor (como Rails) detectan automáticamente el encabezado Accept y gestionan la solicitud de forma adecuada. Si está utilizando un marco diferente o laminando el suyo, puede inspeccionar el encabezado Accept para detectar el formato (en lugar de inspeccionar los parámetros).

+0

También debo señalar que la razón por la que se agregó la solución de encabezado Accept fue para marcos que lo manejan con elegancia, haciendo que la comunicación entre jQuery y dichos marcos (por ejemplo, Rails) sea perfecta. –

6

¡Creo que la documentación lo explica con bastante claridad!

http://docs.jquery.com/Ajax/jQuery.get#urldatacallbacktype

Cargar un control remoto página mediante una solicitud GET HTTP.

http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback

carga JSON datos utilizando una solicitud HTTP GET.

Recuerde, estas son sólo abstracciones del método .ajax

+0

Pero todavía se puede usar $ .get para recibir datos JSON, ¿verdad? Si la página a la que llama devuelve un objeto JSON? – peirix

+0

Claro, supongo, siempre y cuando especifiques el argumento 'data' como json. Si la página va a devolver json, ¿por qué no utilizar el método getJSON? De nuevo, estas son solo abstracciones para simplificar llamadas ajax, desde el método base .ajax. Están ahí para facilitarle las cosas, ¡no para complicarlas! – ScottE

+4

He usado $ .get sin argumento de datos y funciona muy bien. El documento de API dice que el valor predeterminado para el argumento de datos es una "suposición inteligente", por lo que aparentemente jQuery está adivinando correctamente en mis casos de uso ;-) – Elisabeth

2

Las diferencias entre $ y $ .getJSOn .get están en parámetros:

  1. $ .getJSON acepta objetos lisos como los datos, mientras que $ .get acepta objetos simples o cadena.
  2. $ .get tiene el parámetro dataType.

Entonces, usando $ .get con dataType: JSON funcionaría exactamente igual que $ .getJSON.

Cuestiones relacionadas