使用JavaScript/jQuery调用do_action


Call do_action using JavaScript/jQuery

我有一个AJAX函数,它在通过Facebook成功登录后将信息发送到userpro_ajax_url

我正在尝试使用获得运行do_action函数的成功块

<?php 
ob_start();  
do_action('userpro_social_login', <email needs to go here>);
ob_clean();
?>

现在,如果我手动传递电子邮件地址,效果很好,但我可以动态获取电子邮件的唯一方法是通过JavaScript中的当前响应。

完整的功能是:

FB.api('/me?fields=name,email,first_name,last_name,gender', function(response) {
    jQuery.ajax({
        url: userpro_ajax_url,
        data: "action=userpro_fbconnect&id="+response.id+"&username="+response.username+"&first_name="+response.first_name+"&last_name="+response.last_name+"&gender="+response.gender+"&email="+response.email+"&name="+response.name+"&link="+response.link+"&profilepicture="+encodeURIComponent(profilepicture)+"&redirect="+redirect,
        dataType: 'JSON',
        type: 'POST',
        success:function(data){
            userpro_end_load( form );
            <?php 
            ob_start();  
            do_action('userpro_social_login', );
            ob_clean();
            ?>
            /* custom message */
            if (data.custom_message){
                form.parents('.userpro').find('.userpro-body').prepend( data.custom_message );
            }
            /* redirect after form */
            if (data.redirect_uri){
                if (data.redirect_uri =='refresh') {
                    //document.location.href=jQuery(location).attr('href');
                } else {
                    //document.location.href=data.redirect_uri;
                }
            }
        },
        error: function(){
            alert('Something wrong happened.');
        }
    });
});

我尝试使用运行php操作

jQuery(document).trigger('userpro_social_login', response.email);

这两者都不起作用。。。我做错了什么?

修改你的php函数userpro_fbconnect触发那里的代码,或者在完成后创建另一个ajax请求

您不能从JS执行PHP代码,反之亦然。但以下内容可能会对您有所帮助:

<?php
   // Some php code goes here...
?>
<script>
   // JS code...
   ob_start();                                                                    
   do_action('userpro_social_login', <?php <email needs to go here> ?>);
   ob_clean();
</script>

如果您想从JS执行一个方法,并且该方法是使用PHP定义的,并且它是全局范围的,那么只需从JS my_global_method() 调用它

我希望这有助于解决你的问题。