我已经构建了一个插件,我需要在管理中使用ajax,并在这里遵循了文档:https://codex.wordpress.org/AJAX_在……里面_插件
然而,我一直得到的响应是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);
});
}类-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:
EC003025
1234
https://mytestsite.plesk.page/wp-admin/admin-ajax.php警惕总是,
“从服务器获得了这个: 0”
这意味着动作函数没有被调用。
拜托,我漏掉了什么?
谢谢
发布于 2022-03-03 11:23:13
这是因为您选择使用类,但没有将add_action更改为帐户:
add_action( 'wp_ajax_nopriv_get_etim', 'get_etim' );这不是将类函数连接到操作或筛选器的方式。所以Javascript是正确的,但是您的处理程序没有连接到钩子。这就是AJAX处理程序失败的原因,也是add_action使用错误的原因。
这里的解决方案与站点上询问如何挂钩类函数的其他问题相同。
一般性说明:
get_etim,哪个get_etim?一个类可以多次转换为一个对象,它如何知道该调用哪个对象?如果您只创建/使用它一次,那么类的意义是什么?register_rest_route为AJAX使用新的REST,这避免了许多陷阱,并为您提供了一个可以发出请求的漂亮URL。https://wordpress.stackexchange.com/questions/403334
复制相似问题