Как загрузить функцию контроллера и вывести ее в тег twig с помощью Symfony2?

Скажите, что у вас есть URL-адрес, который дал вам данные JSON, такие как:

{'field': 'value'}

... и у вас был аналогичный URL-адрес, за исключением того, что он использовал JSONP, которому вы передали имя функции обратного вызова 'myCallback' (обычно это делается путем предоставления ему параметра запроса, называемого «обратный вызов», например http://example.com/dataSource?callback=myCallback). Затем он вернется:

myCallback({'field':'value'})

... который является не просто объектом, а на самом деле является кодом, который может быть выполнен. Поэтому, если вы определите функцию в другом месте на своей странице с именем myFunction и выполните этот скрипт, она будет вызываться с данными из URL-адреса.

Замечательная вещь: вы можете создать тег сценария и использовать свой URL (в комплекте с параметром callback) в качестве атрибута src, и браузер запустит его. Это означает, что вы можете обойти политику безопасности «того же самого происхождения» (поскольку браузеры позволяют запускать теги скриптов из других источников, кроме домена страницы).

Это то, что делает jQuery, когда вы делаете ajax (используя .ajax с «jsonp» в качестве значения для свойства dataType). Например,

$.ajax({
  url: 'http://example.com/datasource',
  dataType: 'jsonp',
  success: function(data) {
    // your code to handle data here
  }
});

Здесь jQuery позаботится о имени функции обратного вызова и параметре запроса, что делает API идентичным другим вызовам ajax. Но в отличие от других типов запросов ajax, как уже упоминалось, вы не ограничены получением данных из того же источника, что и ваша страница.

20
задан greg0ire 27 November 2011 в 22:42
поделиться