如何在将短码属性存储为类变量的类中实现AJAX

时间:2018-02-05 作者:stuporllama

我正在尝试编写一个OOP插件,将我的shortcode参数传递给类,将它们存储为类变量,然后在AJAX调用中使用它们。

以下是一个示例:

class WPAJAXClassTest {
    private $message;
    public function __construct() {
        add_action(\'wp_enqueue_scripts\', array($this,\'enqueue_scripts\'));
        add_action( \'wp_ajax_testAJAX\', array($this,\'testAJAX\'));
        add_action( \'wp_ajax_nopriv_testAJAX\', array($this,\'testAJAX\'));
    }
    function wpAJAXClassTest($args) {
        $msg=shortcode_atts(array(
            \'message\' => \'Hello World!\'
            ), $args
        );
        $this->setMessage($msg[\'message\']);
        $html="<button id=\'testbutton\'>test</button><p id=\'testreturn\'>".$msg[\'message\']." - ".$this->message."</p>";
        return $html;
    }
    public function setMessage($m) {
        $this->message=$m;
    }
    function enqueue_scripts() {
        $plugin_url = plugins_url()."/wpajaxclasstest";
        wp_enqueue_script(\'wpajaxclasstest_script\', $plugin_url.\'/js/plugin.js\', array("jquery"));
        wp_localize_script( \'wpajaxclasstest_script\', \'myASPlugin\', array(\'plugin_dir\' => $plugin_url));
        wp_localize_script( \'wpajaxclasstest_script\', \'myAJAX\', array(\'ajaxurl\' => admin_url( \'admin-ajax.php\' )));
    }
    function testAJAX() {
        header("Content-Type: application/json");
        $returnArray=array();
        $returnArray[\'message\']=$this->message;
        echo json_encode($returnArray);
        exit();
    }
}
我有一个调用AJAX函数的简单javascript

$.ajax({
    url: myAJAX.ajaxurl,
    data: json,
    method: "POST",
    error: function(data) {
        alert("Error! "+JSON.stringify(data));
    },
    success: function(data) {
        alert(JSON.stringify(data));
    }
});
我的问题是,当我使用我的短代码[wpAJAXClassTest]或[wpAJAXClassTest message=\'再见残酷世界!\']时,我总是得到一个json返回{“message”:“null”},而不是我所期望的类变量$message。

我不想使用静态getinstance,因为我希望能够在同一页面上拥有同一插件的多个实例。

如何让AJAX函数访问类变量?

要澄清:

我想在一个页面上有两个按钮,由短代码标记驱动

[testAJAX message="hello"]
以及

 [testAJAX message="world"]
当我单击一个按钮时,AJAX函数应返回{“message”:“hello”},另一个应返回{“message”:“world”}

1 个回复
SO网友:mmm

要将变量从JavaScript传递到AJAX调用,必须将消息放入数据中:

data : {"message" : "my message"}
您可以在PHP代码中检索它:

function testAJAX() {

    $returnArray = array();
    $returnArray[\'message\'] = $_POST["message"];

    wp_send_json($returnArray);
}
您可以阅读有关wp_send_json 此处:
https://codex.wordpress.org/Function_Reference/wp_send_json

结束

相关推荐

如何从前台发送AJAX调用而不在主题中使用wp_LOCALIZE_脚本

我的情况是,我必须在不使用任何插件的情况下从前端发送数据,因为代码正在使用Ajax加载到同一页面上,所以我不能使用任何插件,因为插件文件将在刷新文件时加载,但页面未加载。我正在使用post snippet plugin 将PHP和JS发送到页面上正在加载的页面。PHP Code is:- if ( is_user_logged_in() ) { global $current_user; $unit_id= get_the_ID(); $userid = $current_user