Alguém poderia me ajudar a descobrir como começar a usar o JSONP?
Código:
$('document').ready(function() {
var pm_url = 'http://twitter.com/status';
pm_url += '/user_timeline/stephenfry.json';
pm_url += '?count=10&callback=photos';
var photos = function (data) {
alert(data);
};
$.ajax({
url: pm_url,
dataType: 'jsonp',
jsonpCallback: 'photos',
jsonp: false,
});
});
Violino: http://jsfiddle.net/R7EPt/6/
Deveria produzir um alerta, pelo que pude extrair da documentação: não está (mas não está produzindo nenhum erro).
obrigado.
Respostas:
JSONP é realmente um truque simples para superar a mesma política de domínio XMLHttpRequest . (Como você sabe, não é possível enviar uma solicitação AJAX (XMLHttpRequest) para um domínio diferente.)
Portanto, em vez de usar XMLHttpRequest , precisamos usar tags HTMLl de script , aquelas que você costuma usar para carregar arquivos JS, para que JS obtenha dados de outro domínio. Soa estranho?
A coisa é - as tags de script podem ser usadas de maneira semelhante ao XMLHttpRequest ! Veja isso:
Você terminará com um segmento de script que se parece com este após carregar os dados:
No entanto, isso é um pouco inconveniente, porque precisamos buscar esse array na tag de script . Então, os criadores do JSONP decidiram que isso funcionaria melhor (e é):
Aviso my_callback função ali? Então - quando o servidor JSONP recebe sua solicitação e encontra o parâmetro de retorno de chamada - em vez de retornar uma matriz JS simples, ele retornará isso:
Veja onde está o lucro: agora temos o retorno de chamada automático ( my_callback ) que será acionado assim que recebermos os dados. É tudo o que há para saber sobre JSONP : são tags de retorno de chamada e script.
NOTA:
Estes são exemplos simples de uso de JSONP, não são scripts prontos para produção.
Demonstração de RAW JavaScript (feed simples do Twitter usando JSONP):
Exemplo básico de jQuery (feed simples do Twitter usando JSONP):
JSONP significa JSON com preenchimento . (técnica muito mal nomeada, pois realmente não tem nada a ver com o que a maioria das pessoas pensaria como "preenchimento".)
fonte
Access-Control-Allow-Origin
cabeçalhos que permitem que chamadas regulares do Ajax sejam feitas para alguns domínios de origem cruzada.Existe uma maneira ainda mais fácil de como trabalhar com JSONP usando jQuery
O
?
final da URL informa ao jQuery que é uma solicitação JSONP em vez de JSON. O jQuery registra e chama a função de retorno de chamada automaticamente.Para mais detalhes, consulte a documentação do jQuery.getJSON .
fonte
&callback=?
pois esse não é o primeiro parâmetro no seu caso.Em resposta ao OP, há dois problemas com seu código: você precisa definir jsonp = 'callback' e adicionar uma função de retorno de chamada em uma variável como você parece não funcionar.
Atualização: quando eu escrevi isso, a API do Twitter estava aberta, mas eles mudaram e agora requer autenticação. Mudei o segundo exemplo para um exemplo funcional (2014Q1), mas agora usando o github.
Isso não funciona mais - como exercício, veja se você pode substituí-lo pela API do Github:
embora alert () um array como esse realmente não funcione bem ... A guia "Net" no Firebug mostrará o JSON corretamente. Outro truque útil está fazendo
Você também pode usar o método jQuery.getJSON . Aqui está um exemplo completo de html que obtém uma lista de "gists" do github. Dessa forma, ele cria uma função de retorno de chamada nomeada aleatoriamente para você, que é o final "retorno de chamada =?" no URL.
fonte
O código acima ajuda na obtenção de imagens da API do Flicker. Isso usa o método GET para obter imagens usando JSONP. Pode ser encontrado em detalhes aqui
fonte