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函数。