Intereting Posts
Регенерировать миниатюры для изображений, которые не находятся в медиа-библиотеке Загрузка сценариев на одной странице заставляет сценарий в нижнем колонтитуле Значение цвета wpColorPicker Дублировать страницы с параметром? S Добавить пользовательский столбец в панель «Пользователи» с пользовательскими полями «Типы»? Как отлаживать функцию обратного вызова register_setting Ajax и автозаполнение Проблемы при изменении постоянной ссылки Структура Каковы причины безопасности, запрещающие загрузку Microsoft Word? Не перенаправляемая страница не была перенаправлена ​​должным образом при перенаправлении Multisite: перенаправление администратора субсайта на домашнюю страницу Subsite, обход панели управления Есть ли способ использовать пользователей WordPress, но без загрузки всего ядра WordPress? Установите флажок Пользовательская таксономия Метаданные метаданных не отображаются Использование крючков с дополнительными параметрами

Как использовать JSONP для запроса AJAX на другой сайт в сети

Я пытаюсь получить аватары buddypress на главном сайте сети с подсайта. То, как buddypress делает аватары, действительно связано с циклами и резервами и т. Д. И не состоит из каких-либо вызовов в базе данных, что было бы просто.

Вместо этого я подумал, что, возможно, я создам функцию на своем основном сайте для вывода аватара пользователя, а затем возьму его с помощью AJAX. Но междоменная политика действует, и мне трудно понять, как реализовать JSONP, чтобы обойти ее.

Мой javascript выглядит так:

$('.external-avatar').each(function(){ var user_id = $(this).data('user_id'); $.ajax({ type: 'POST', url: vars.rootAjaxurl, data: { action: 'bp_cross_site_avatar', user_id: user_id, }, success: function(data, textStatus, XMLHttpRequest, user_id){ $(".external-avatar.user-"+user_id).attr('src', data); }, error: function(MLHttpRequest, textStatus, errorThrown){ // alert(errorThrown); } }); }); 

Есть ли способ заставить такой запрос работать?

Solutions Collecting From Web of "Как использовать JSONP для запроса AJAX на другой сайт в сети"

Для этого есть две части: для вызова javascript ajax требуются определенные переменные:

  $.ajax({ type: "GET", url: SSL_Ajax.ajaxurl, cache: false, dataType: "jsonp", crossDomain: true, data: { action : 'ajaxSSL', ajaxSSLNonce : SSL_Ajax.ajaxSSLNonce, input : $('input[name=title]').val() }, success: function( data ) { console.log( 'success' ); console.log( data ); }, complete: function( data ) { console.log( 'complete' ); console.log( data ); }, error: function( data ) { console.log( 'error' ); console.log( data ); } }); 

Важными переменными здесь для jsonp являются cache , dataType и crossDomain . Примечание. Когда ваш dataType является jsonp, он создает дополнительный «обратный вызов». Кроме того, по своей природе jsonp является type GET.

Другая важная вещь, которую следует отметить, заключается в действиях wp_ajax_nopriv_{action} и wp_ajax_{action} которые необходимо включить в заголовок обратного вызова и контроля доступа:

 header("content-type: text/javascript; charset=utf-8"); header("access-control-allow-origin: *"); echo htmlspecialchars($_GET['callback']) . '(' . $response . ')'; // IMPORTANT: don't forget to "exit" exit; 

Я написал об использовании jsonp в WordPress, если вы хотите получить более подробную информацию.

Передайте идентификатор блога switch_to_blog() вашему обработчику обратного вызова AJAX, используйте switch_to_blog() и получите нужные данные.

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