WordPress中的异步请求

时间:2017-11-27 作者:Atila Silva

在wordpress插件中通过ajax发出请求时,我遇到了一个小问题。

以下是服务器端:

add_action(\'admin_enqueue_scripts\', \'my_enque_post\');

    function my_enque_post()
    {
        wp_register_script(\'PostList\', RADIOWEB__PLUGIN_URL . "/js/postlist.js", array(
            \'jquery\'
        ));
        $title_nonce = wp_create_nonce(\'title_example\');
        wp_localize_script(\'PostList\', \'modallist\', array(
            \'ajaxurl\' => admin_url(\'admin-ajax.php\') ,
            \'nonce\' => $title_nonce
        ));
        wp_enqueue_script(\'PostList\');
    }

    add_action(\'wp_ajax_nopriv_get-list-post\', \'get_list_post\');
    add_action(\'wp_ajax_ajax_obter-list-post\', \'get_list_post\');

    function get_list_post()
    {
        $teste = $_POST[\'teste\'];
        echo $teste.\'34\' ;
        wp_die();
    }
正如我们所看到的,该脚本指向以下内容:

jQuery(document).ready(function($) {
    function queryPostsTable() {
        jQuery.ajax({
            type: "POST",
            url: modallist.ajax_url,
            _ajax_nonce: modallist.nonce,
             action: \'get_list_post\',
             teste: \'teste12\',            
            success: function(response) {
               console.log(response);
            }
        });
    }

    $("#programa-search").change(function() {

        queryPostsTable();

    });


});
当我运行脚本时,response变量会返回插件adm页面的整个html。

enter image description here

但这不是我所期望的

我的目标是执行以下功能:

get_list_post ();
它捕获测试后变量并对其进行响应。

我的目标是在这个函数中执行操作:get\\u list\\u post();

并返回回声。我希望在执行这段代码时返回控制台。日志:teste1234 有谁能给我一个如何达到这个结果的提示吗?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

您的AJAX URL变量在PHP和JS中是不同的。在您的JS中,您指的是ajax_url:

url: modallist.ajax_url,
但是PHP中定义的变量是ajaxurl:

\'ajaxurl\' => admin_url(\'admin-ajax.php\') ,
这就是为什么你会得到完整的管理页面作为回应。您的请求将转到当前页面,因为没有真正的URL。

另一个问题是挂钩的操作不正确。您的挂钩是:

add_action(\'wp_ajax_nopriv_get-list-post\', \'get_list_post\');
add_action(\'wp_ajax_ajax_obter-list-post\', \'get_list_post\');
首先,他们是不同的。它们应该是一样的,但有一个no_priv. 第二个问题是,它们与JS中的操作名称不匹配。在JS中,您已将操作设置为:

action: \'get_list_post\',
因此,您的挂钩应该是:

add_action(\'wp_ajax_nopriv_get_list_post\', \'get_list_post\');
add_action(\'wp_ajax_get_list_post\', \'get_list_post\');

结束

相关推荐

如何防止样式表影响header.php或footer.php?

我用板条箱装了一只脚。php和相应的customFooter。php。在我添加头球之前,它看起来很棒。php和customHeader。css。现在,两个自定义css文件正在重叠。例如:一些<img> 由于另一个css文件的对齐,未正确对齐。是否可以将某些css文件仅限于特定的pphp文件??