JSONP - Объяснить подводные камни jQuery.ajax () статического jsonpCallback (против случайных имен обратных вызовов jQuery) - PullRequest
3 голосов
/ 17 мая 2011

Я передаю свой файл JSONP JavaScript на статический файловый сервер - GitHub Pages.

Это означает, что я не могу динамически установить имя функции обратного вызова JSONP на сервере ...

Динамический пример - PHP

header('Content-Type: text/javascript; charset=utf8');
$data = '{ "foo":"bar" }'; // json string
echo $_GET['callback'] .'('.$data.');'; // function name set via ?callback=xyz

jQuery.ajax () имеет параметр jsonpCallback для определения имени статической функции обратного вызова.Таким образом, я могу создать файл javascript, например test-jsonp.js, со следующим содержимым:

Статический пример - файл JavaScript

jsonpCallbackABC({ "foo":"bar" });

ОднакоДокументация jQuery предполагает, что static является менее желательным.

http://api.jquery.com/jQuery.ajax/

jsonpCallback
Укажите имя функции обратного вызова для JSONPзапрос.Это значение будет использоваться вместо случайного имени, автоматически сгенерированного jQuery.Желательно, чтобы jQuery генерировал уникальное имя, так как это облегчит управление запросами и обратные вызовы и обработку ошибок.Возможно, вы захотите указать обратный вызов, если хотите улучшить кэширование GET-запросов в браузере.

Может кто-нибудь подробнее расскажет о подводных камнях имен статических функций JSONP?

Ответы [ 2 ]

3 голосов
/ 17 мая 2011

Это просто: выполняет ли ваша страница одновременные запросы с использованием jsonp (в основном страницы делают так, как запросы запускаются асинхронно из событий страницы)?

Если это так, ответы будет сложнее разделить и обработать, если у вас есть одна точка входа (один обратный вызов jsonp).

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

1 голос
/ 17 мая 2011

Если в вашем коде есть другое место, где определена функция с тем же именем, она столкнется с функцией в jsonp.

У вас также могут возникнуть проблемы, если вы попытаетесь вызвать тот же сервисв разных частях страницы все вызовы ajax будут получать одинаковый ответ, это может вызвать затруднения при отладке поведения.

...