我已经构建了一个插件,我需要在管理中使用ajax,并遵循以下文档:https://codex.wordpress.org/AJAX_in_Plugins
然而,我一直得到的回应是0。
我知道有很多帖子都有相同的问题,我已经浏览了所有的帖子,但都找不到解决方法。请帮忙。
我为插件使用了一个类,并将jquery放在一个单独的文件中。
myplugin-admin.js
function getFeatureIDs(selectObject){
var value = selectObject.value;
console.log(value);
console.log(ajax_object.we_value);
console.log(ajax_object.ajax_url);
var data = {
\'action\': \'get_etim\',
\'whatever\': ajax_object.we_value
};
jQuery.post(ajax_object.ajax_url, data, function(response) {
alert(\'Got this from the server: \' + response);
});
}
class-myplugin-admin.php
class myplugin_Admin {
private $myplugin;
private $version;
public function __construct($myplugin,$version ) {
add_action(\'wp_ajax_get_etim\', \'get_etim\');
add_action( \'wp_ajax_nopriv_get_etim\', \'get_etim\' );
}
public function enqueue_scripts() {
wp_enqueue_script( $this->myplugin, plugin_dir_url( __FILE__ ) . \'js/myplugin-admin.js\', array( \'jquery\' ), $this->version, false );
wp_localize_script( $this->myplugin, \'ajax_object\', array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ), \'we_value\' => 1234 ) );
}
public function get_etim() {
echo $_REQUEST[\'whatever\'];
wp_die();
}
}
Results in console:
EC003025
1234
https://mytestsite.plesk.page/wp-admin/admin-ajax.php
警报总是,
"E;从服务器获取此信息:0“;
这表明没有调用action函数。
拜托,我错过了什么?
谢谢
最合适的回答,由SO网友:Tom J Nowell 整理而成
这是因为您选择使用类,但没有更改add_action
要说明:
add_action( \'wp_ajax_nopriv_get_etim\', \'get_etim\' );
这不是将类函数挂接到动作或过滤器的方式。因此,您的Javascript是正确的,但您的处理程序没有连接到挂钩。这就是AJAX处理程序失败的原因
add_action
.
这里的解决方案与站点上的其他问题相同,这些问题询问如何挂钩类函数。
一般说明:
类的使用并不能改进这段代码,这不是OO,问问你自己,如果它是用来调用get_etim
, 哪个get_etim
? 一个类可以多次转换为对象,它如何知道调用哪个对象?如果只创建/使用一次,那么类的要点是使用旧的遗留API,您应该通过register_rest_route
它避免了许多陷阱,并为您提供了一个漂亮的URL来向The codex is old and was retired several years ago, and can contain out of date information. You should refer to the developer page instead at https://developer.wordpress.org/