используя указанную функцию в качестве обратного вызова для $ .getJSON в JQuery, чтобы удовлетворить запрос Facebook требования подписывания

голоса
3

Я пытаюсь получить доступ к API метода Admin.getMetrics Facebook с помощью JQuery. Я правильно составления запроса URL на стороне сервера (для того , чтобы сохранить мое приложение секретный секрет). Я затем отправить URL к браузеру , чтобы быть запрос с использованием jQuery.getJSON().

Facebook требует , чтобы я послал копию всех моих запросов Params беспорядочного с моим приложением тайной вместе с запросом, чтобы проверить свою подлинность. Проблема заключается в том, что JQuery хочет создать имя самой функции обратного вызова для того , чтобы соответствовать имени она дает анонимную функцию вы передаете и вызывается , когда данные возвращаются. Таким образом, имя функции не доступно , пока jQuery.getJSON()выполняется , и Facebook считает мою просьбу быть недостоверными из - за несогласованную подпись (подпись шлю вдоль не включают правильные обратный вызов параметров , потому что не было сформирован до тех пор jQuery.getJSON()RAN).

Единственный способ , которым я могу думать из этой проблемы является каким - то образом указать имя моей функции jQuery.getJSON()вместо того , чтобы позволить ему остаться неизвестным. Но я не могу найти любой вариант для делать это в JQuery AP.

Задан 15/10/2008 в 00:21
источник пользователем
На других языках...                            


4 ответов

голоса
1

Вы можете передать опцию JSONP в $ .ajaxSetup, что позволит вам исправить имя функции, которая будет вызываться, Документы следующим образом:

JSONP Строка
Override имя функции обратного вызова в запросе JSONP. Это значение будет использоваться вместо «обратного вызова» в "обратном вызове =? часть строки запроса в URL для GET или данных для POST. Так {JSONP: 'onJsonPLoad'} приведет к "onJsonPLoad =? передается на сервер.

Смотрите здесь http://docs.jquery.com/Ajax/jQuery.ajax#options для получения более подробной информации

Ответил 15/10/2008 в 00:47
источник пользователем

голоса
0

Это лучшее решение с фиксированным обратным вызовом:

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'); } );
});

Проблема с этим обратного вызова вы можете обрабатывать только один вид запроса в то время как функция глобально зарегистрирована. Функции обратного вызова, вероятно, придется превратиться в диспетчер для различных типов данных, которые он может получить и вызвать соответствующую функцию.

Ответил 15/10/2008 в 16:26
источник пользователем

голоса
2

Использование jQuery.getScriptоказалось близким к - но не совсем - ответ. Использование getScript устраняет необходимость JQuery, чтобы добавить динамически с именем анонимной функции запроса Params (хотя он все равно будет это делать, если вы идете вперед и передать ему анонимную функцию , как в приведенной выше коде). Тем не менее, по умолчанию в jQuery.getScript, как и во всех других вызовах в библиотеке Ajax JQuery, является , чтобы добавить еще один дополнительный аргумент _=12344567(где 1234567 действительно штамп времени). JQuery делает это , чтобы предотвратить браузер от кэширования ответа. Тем не менее, это дополнительные перерывы моего подписания запроса так же , как функция обратного вызова с автоматическим именем.

С некоторой помощью на #jquery, я узнал , что единственный способ получить JQuery не связываться вообще с Params, чтобы сделать запрос , используя базовый jQuery.Ajaxметод со следующими аргументами:

jQuery.ajax({
  url: fbookUrl,
  dataType: "script",
  type: "GET",
  cache: true,
  callback: null,
  data: null
});

(где fbookUrlэто API URL Facebook Я пытаюсь запросить с его полной Params включая подпись и callback=myFunction). dataType: "script"Аргумент указывает , что в результате JSONP должен быть засунуты в тег сценария на странице для выполнения, cache: trueсообщает JQuery , чтобы позволить браузеру кэшировать ответ, то есть , чтобы пропустить добавление параметра метки времени.

Ответил 15/10/2008 в 17:12
источник пользователем

голоса
3

Единственное, что сделал работу для меня были следующие настройки

jQuery.ajax({ url: fbookUrl, dataType: "jsonp", type: "GET", cache: true, jsonp: false, jsonpCallback: "MyFunctionName" //insert here your function name });

Ответил 18/05/2011 в 13:30
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more