在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。
但这不是我所期望的
我的目标是执行以下功能:
get_list_post ();
它捕获测试后变量并对其进行响应。
我的目标是在这个函数中执行操作:get\\u list\\u post();
并返回回声。我希望在执行这段代码时返回控制台。日志:teste1234
有谁能给我一个如何达到这个结果的提示吗?
最合适的回答,由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\');