调用具有多个参数的PHP函数,该函数位于AJAX处理程序之外

时间:2020-05-25 作者:ScottUSA

Q: 使用AJAX处理程序中的多个参数调用PHP函数的正确方法是什么?Q: 我调用php函数是否正确?Q: 有没有更简单的方法?


Page Element 用户单击按钮。

Action: 单击将调用php代码,使用以下参数连接到外部服务器:

用户名2。IP地址3。端口4。公钥5。服务Purpose:将投票字符串(从主机A)发送到外部游戏服务器(主机B)
我不需要更新任何WordPress内容。注意:我拥有这两台服务器。

WordPress Version: 5.4.1 PHP Version on Server 7.3

最初,我在一个单独的文件“/wp-contents/plugins/my-plugin/votifier.php”中有我的自定义php代码,我试图从AJAX处理程序调用该文件中的函数。

我的插件。php发送投票。js votifier。php(我最终将代码从这里移到了上面的1.MyPlugin.php中)我确保了自定义插件被激活。

我让WordPress处于调试模式。i、 e.调试模式为true。

The Button

<div id="frm_field_61_container">
<button type="button">Try it</button>
</div>

WordPress JQuery with AJAX (sendvote.js)

注意:此代码位于“我的插件”文件夹中的单独文件中。文件名sendvote。js公司

jQuery(document).ready( function($) {
 $("#frm_field_61_container").click(function(){
       // e.preventDefault();  // used to cancel forms submit action.


    jQuery.ajax({

        url : myAjax.ajaxurl,

        type : \'POST\',

        dataType : \'json\',

        data : {
             \'action\'   :\'my_vote_count\'
            ,\'username\' :$.trim($(\'#field_9gma9\').val())
            ,\'key\'      :$.trim($(\'#field_yjr62\').val())
            ,\'ip\'       :$.trim($(\'#field_973sr\').val())
            ,\'port\'     :$.trim($(\'#field_q9ajo\').val())
            ,\'service\'  :\'Votifier\'
            ,\'nonce\'    :\'votifier_nonce_key\'
        },

        success: function(data) {

                    console.log(data);
                },

        error: function(errorThrown){
                    console.log(errorThrown);
                }

      });   
   });
});
/* ===== WP_ENQUEUE SCRIPTS ==== */注意:此代码位于一个单独的文件中,文件名为MyPlugin。php。

add_action( \'wp_enqueue_scripts\', \'my_script_enqueuer\' );
function my_script_enqueuer() {

   wp_enqueue_script( \'my_voter_script\',  plugins_url(\'sendvote.js\', __FILE__), array( \'jquery\'),\'1.0\', true);

   wp_localize_script( \'my_voter_script\', \'myAjax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' )));

}
/* ===== My AJAX Handler ==== */注意:此代码也在“MyPlugin.php”文件中。

add_action( \'wp_ajax_nopriv_my_vote_count\', \'my_ajax_handler\' );  
add_action( \'wp_ajax_my_vote_count\', \'my_ajax_handler\');
function my_ajax_handler() {

//check_ajax_referer(\'votifier_nonce_key\'); 

$user = (isset($_POST[\'username\'])) ? $_POST[\'username\'] : \'Missing User\';
$key = (isset($_POST[\'key\'])) ? $_POST[\'key\'] : \'Missing Key\';
$ip = (isset($_POST[\'ip\'])) ? $_POST[\'ip\'] : \'Missing ip Address\';
$port = (isset($_POST[\'port\'])) ? $_POST[\'port\'] : 25566;
$service = (isset($_POST[\'service\'])) ? $_POST[\'service\'] : \'Missing Service\';

define( \'PUBLIC_KEY_FORMAT\', "-----BEGIN PUBLIC KEY-----\\n%s\\n-----END PUBLIC KEY-----" );

       /* XXXX Custom Code Here XXXX */
       // The function sendVote() was in a separate file. 
       // The file votifier.php contained the sendVote() function.  
       // note:  The functions were good and working outside WordPress
       // i.e. I fully tested them before trying to call the function from here.

       // I gave up trying and just 
       // put all the PHP code here and removed all functions.
       // I removed -- echo sendVote($p1,$p2,$p3,$p4,$p5); -- from this area.
       // when I did that the everything started to work.

       //  I know WordPress functions work here.
       //  Why can\'t I call my own custom function from a separate php file?

       //  Do I need to add an include statement?

wp_send_json_success($user . $fkey . $ip . $port . $service . $crypted);
wp_die(); // All ajax handlers die when finished

}
Its working now一个答案是。。。

将所有PHP代码放在AJAX处理程序中,而不是尝试调用外部PHP函数。

1 个回复
SO网友:Abhik

很抱歉延迟回复。首先允许从WordPress发布到游戏服务器(使用Apache或PHP或任何方法)。

然后在AJAX处理程序函数上,使用wp_remote_post 将数据发布到游戏服务器。

$request = wp_remote_post( \'https://urltoyour/gameserver/voting/endpoint\', array(
    \'body\'        => $body, // array/json formatted voting data

) );

$response = wp_remote_retrieve_body( $request );
有关详细信息,请查看WordPressHTTP API.

相关推荐

如果分类不存在,AJAX搜索框不显示任何内容

您好,我有一个ajax搜索框,它可以从我的帖子类型中提取所有分类法,但如果我开始键入而分类法不存在,它只会显示一个小框,其中没有任何内容。是否可以更改此设置,以便在分类不存在的情况下,在框中弹出“未找到搜索结果”这是我的职责:function fetch(){ var keyword = jQuery(\'#listing_tags\').val(); var myDiv = document.getElementById(\"ajaxbox\"); &#