Por jQuery não está anexando automaticamente o callback JSONP?
Pergunta
$.getJSON()
documentação estados:
Se o URL especificado está em um servidor remoto, a solicitação é tratada como JSONP vez. Veja a discussão sobre o tipo de dados
jsonp
em $ .ajax () para mais detalhes.
O $.ajax()
documentação para os estados tipo de dados jsonp
(grifo meu):
Cargas em um bloco JSON usando JSONP. irá adicionar um extra "? Callback =?" ao final do seu URL para especificar o callback .
Assim, parece que se eu chamar $.getJSON()
com um URL entre domínios, o extra "callback =?" parâmetro deve automaticamente adicionadas. (Outras partes da documentação apoiar esta interpretação.)
No entanto, eu não estou vendo esse comportamento. Se eu não adicionar o "callback =?" explicitamente, jQuery incorrecta faz um XMLHttpRequest (que retorna nulo de dados desde que não pode ler a vários domínios de resposta). Se eu fizer adicioná-lo explicitamente, jQuery corretamente faz um
Outras dicas
Tente isto:
var URL = "http://www.geonames.org/postalCodeLookupJSON" +
"?postalcode=10504&country=US";
function alertResponse(data, status) {
alert("data: " + data + ", status: " + status);
}
$.ajax({
url: URL,
dataType: 'jsonp',
jsonpCallback: 'alertResponse',
});
Sim, eu acho que você entendeu mal. $.getJSON
é um atalho para $.ajax({datatype: 'json'....
como a documentação diz. Ele nunca faz uma chamada JSONP a menos que você adicione o parâmetro callback=?
.
Eu estou usando o código abaixo,
$. Ajax ({ url: URL, dataType: 'jsonp', sucesso: function (dados) { // faça alguma coisa } error: function (jqXHR, textStatus, errorThrown) {}, jsonpCallback: 'login_callback', });
Mas, callback às vezes fica anexada ao final da URL e, por vezes, não no IE. Enquanto sua multa em cromo e FF trabalho.