usando uma função chamada como o retorno de chamada por US $ .getJSON em jQuery para satisfazer Facebook solicitação de assinatura de demandas
-
03-07-2019 - |
Pergunta
Estou tentando acessar o método Facebook API Admin.getMetrics via jQuery. Estou compondo corretamente a url pedido no lado do servidor (a fim de manter meu aplicativo segredo segredo). Estou em seguida, enviar a url para o navegador a ser pedido através jQuery.getJSON()
.
Facebook exige que eu enviar uma cópia de todos os meus parâmetros de solicitação de hash com o meu segredo aplicação, juntamente com o pedido, a fim de verificar a minha autenticidade. O problema é que jQuery quer gerar o nome da função de retorno em si, a fim de coincidir com o nome dá à função anônima que se passa em ser chamado quando os retornos de dados. Portanto, o nome da função não está disponível até executa jQuery.getJSON()
e Facebook considera o meu pedido para ser inautêntica devido a uma assinatura incompatível (a assinatura I enviar junto não inclui o parâmetro de retorno de chamada correta porque que não foi gerado até correu jQuery.getJSON()
).
A única maneira que eu posso pensar em sair deste problema é especificar alguma forma o nome da minha função para jQuery.getJSON()
em vez de permitir que ele permaneça anônimo. Mas eu não consigo encontrar nenhuma opção para fazê-lo no jQuery AP.
Solução 2
O uso de jQuery.getScript
acabou por ser perto - mas não completamente - a resposta. Usando getScript elimina a necessidade do jQuery para adicionar a função anônima chamada dinamicamente para os parâmetros de solicitação (embora ele ainda vai fazer isso se você vá em frente e passar uma função anônima como no código acima). No entanto, o padrão no jQuery.getScript
, como em todas as outras chamadas na biblioteca Ajax do jQuery, é acrescentar mais uma _=12344567
argumento adicional (onde 1234567 é realmente um carimbo de tempo). jQuery faz isso para evitar que o navegador cache a resposta. No entanto, este breaks adicionais minha assinatura do pedido assim como a função de retorno de nome automático.
Com alguma ajuda em #jquery, eu aprendi que a única maneira de obter jQuery para não mexer em tudo com os seus parâmetros é fazer a solicitação usando o método base jQuery.Ajax
com os seguintes argumentos:
jQuery.ajax({
url: fbookUrl,
dataType: "script",
type: "GET",
cache: true,
callback: null,
data: null
});
(onde fbookUrl
é a API url Facebook Estou tentando pedido com seus completos parâmetros, incluindo a assinatura eo callback=myFunction
). Os especifica dataType: "script"
arg que o JSONP resultante deve ser colocado em uma tag script na página para execução, cache: true
diz jQuery para permitir que o navegador para armazenar em cache a resposta, ou seja, para ignorar a adição do parâmetro carimbo de tempo.
Outras dicas
A única coisa que fez o trabalho para mim foram as seguintes configurações
jQuery.ajax({
url: fbookUrl,
dataType: "jsonp",
type: "GET",
cache: true,
jsonp: false,
jsonpCallback: "MyFunctionName" //insert here your function name
});
Você pode passar a opção JSONP para US $ .ajaxSetup que lhe permitirá corrigir o nome da função que é chamado, os docs ter a seguinte redacção:
jsonp Cordas
Substituir o nome da função de retorno de chamada em um pedido jsonp. Este valor será usado em vez de 'retorno' no 'callback =? parte da string de consulta na URL para um GET ou os dados para um POST. Então {jsonp: 'onJsonPLoad'} resultaria em '? OnJsonPLoad =' passado para o servidor.
Veja aqui http://docs.jquery.com/Ajax/jQuery.ajax #options para mais detalhes
Esta é uma solução melhor com um retorno fixo:
window.fixed_callback = function(data){
alert(data.title);
};
$(function() {
$.getScript("http://api.flickr.com/services/feeds/photos_public.gne?tags=cats&tagmode=any&format=json&jsoncallback=fixed_callback", function(data) {
alert('done'); } );
});
O problema com este callback é que você só pode lidar com um tipo de solicitação de cada vez que a função é globalmente registrado. A função de retorno provavelmente teria de se transformar em um despachante para os diferentes tipos de dados que poderia recuperar e chamar a função apropriada.