插件管理端的AJAX-返回0

时间:2022-03-03 作者:LeeTee

我已经构建了一个插件,我需要在管理中使用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函数。

拜托,我错过了什么?

谢谢

1 个回复
最合适的回答,由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/

相关推荐

新的jQuery和引导中断插件

我基于w3schools模式框编写了一个插件https://www.w3schools.com/bootstrap/bootstrap_modal.asp然而,当我将插件提交到wordpress目录时,他们说我需要升级到最新版本。当我这样做时,模式特性和javascript功能就不再工作了。我甚至在w3school的测试网站上尝试过,也遇到了同样的问题。有没有人有一个模式对话框的解决方案,可以与最新的jquery、引导和对话框一起使用?以下是我更改的内容:这是w3schools的默认设置<title