Los estados $.getJSON()
documentación:¿Por qué jQuery no agrega automáticamente la devolución de llamada JSONP?
If the specified URL is on a remote server, the request is treated as JSONP instead. See the discussion of the
jsonp
data type in $.ajax() for more details.
La documentación $.ajax()
para el estados de tipos de datos jsonp
(el énfasis es mío):
Loads in a JSON block using JSONP. Will add an extra "?callback=?" to the end of your URL to specify the callback.
Así que parece que si llamo $.getJSON()
con una URL de varios dominios, la "devolución de llamada" extra? el parámetro debería agregarse automáticamente. (Otras partes de la documentación respaldan esta interpretación.)
Sin embargo, no veo ese comportamiento. Si no agrego la "devolución de llamada =?" explícitamente, jQuery hace incorrectamente un XMLHttpRequest (que devuelve datos nulos ya que no puedo leer el dominio cruzado de respuesta). Si lo agrego explícitamente, jQuery hace correctamente una solicitud de script < >.
He aquí un ejemplo:
var URL = "http://www.geonames.org/postalCodeLookupJSON" +
"?postalcode=10504&country=US";
function alertResponse(data, status) {
alert("data: " + data + ", status: " + status);
}
$.getJSON(URL, alertResponse);
// alerts "data: null, status: success"
$.getJSON(URL + "&callback=?", alertResponse);
// alerts "data: [object Object], status: undefined"
Entonces, ¿qué está pasando? ¿Estoy malentendiendo la documentación u olvidando algo?
No hace falta decir que esto no es una gran cosa, pero estoy creando una API web y premeditadamente establecí el parámetro de devolución de llamada en "devolución de llamada" con la esperanza de adaptarlo bien al uso de jQuery.
Gracias!
(Edit:. I cross-posted this en los foros jQuery si está interesado)
En su ejemplo, en realidad quiere decir 'jsonpCallback: 'alertResponse'', y sí, eso funciona sin tener que agregar explícitamente la" devolución de llamada =? " parámetro. Pero eso es mucho más detallado que la elegancia de '$ .getJSON()'. Sería bueno si '$ .getJSON()' funcionó como documentado ... –