如何使用JSONP向网络上不同站点发出AJAX请求

时间:2013-08-26 作者:Damon

我正在尝试从子站点获取网络主站点上的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);  
              }  
            });  
        });
有没有办法让这样的请求生效?

2 个回复
SO网友:jackreichert

这有两个部分,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. Note: 当您的数据类型为jsonp时,它会创建一个额外的变量“回调”。而且,就其本质而言,jsonp是type 收到

另一个需要注意的重要事项是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;
我写了一篇关于using jsonp in WordPress 如果你想了解更多细节。

SO网友:fuxia

将子站点的博客ID传递给AJAX回调处理程序,使用switch_to_blog() 然后获取所需的数据。

这样,您就可以在同一个站点上进行所有前端处理,同时使用PHP从另一个站点获取信息。

结束

相关推荐

WordPress MultiSite可以使用了吗?

我计划为不同类型的社区创建一个网站。例如,不同类型的开发人员。PHPJavaAndroidTC每种类型都有不同的注册和配置文件字段。现在我的困惑是,要么我应该创建多站点网络,每个站点将包含不同的开发人员,要么只有一个站点可以明智地完成这项工作?我需要做的一些事情是允许用户随时开始使用其他网站,例如,如果x用户注册了Java,现在他想注册PHP,他应该能够在不再次注册的情况下放置他的内容,并且用户id也应该是相同的,所以每当我通过用户id获取内容时,它都会给我来自同一用户的不同网站的所有数据。另一个问题是,