Как использовать 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.