使用 JavaScript/jQuery 调用 do_action

Posted

技术标签:

【中文标题】使用 JavaScript/jQuery 调用 do_action【英文标题】:Call do_action using JavaScript/jQuery 【发布时间】:2016-07-29 07:15:35 【问题描述】:

我有一个 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);

这些都不起作用......我做错了什么?

【问题讨论】:

lol 没看到从 js 执行 php 我从没想过我也需要这样做 :) 【参考方案1】:

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

【讨论】:

感谢 Madalin,我可以将触发器传递到该端点,但是如果该插件得到更新,它将破坏此功能。 然后再做一个ajax请求 是的,这就是我现在正在考虑做的事情,我认为应该可以正常工作:) 一旦它工作,我会接受这个答案。【参考方案2】:

您不能从 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() 调用它

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

【讨论】:

感谢 Muhammad,您明白了要点,并且我确实使用了 JS 之前的 php,类似于您所指出的,但是,我无法从php 端,因为它是通过 API 调用从 FB 返回的。 @Yohio 欢迎,如果它对你有用,请接受答案! 我不明白你的回答

以上是关于使用 JavaScript/jQuery 调用 do_action的主要内容,如果未能解决你的问题,请参考以下文章

如何找出使用 javascript/jquery 调用函数的次数?

使用 JavaScript/jQuery 调用 do_action

如何从 .cs 文件 (C#) 调用 JavaScript/jQuery 函数

如何在 Javascript/jQuery 中重置超时?

在 razor 代码中使用 javascript/jquery

从纯 Javascript/JQuery 调用 Angular js 函数