我'm trying to utilize WordPress' s admin-ajax功能,以便为插件构建动态管理面板选项集 . 基本上,一旦从下拉列表中选择一个选项(选择/选项菜单),PHP函数将排序并显示更多下拉菜单,这些菜单属于它上面的下拉列表 . 我从一个简单的回归开始,我希望稍后使用,但我似乎无法将文本打印出来而不会遇到 unidentified
问题 .
我设置的AJAX发出200状态,但响应永远不会构建,我的结果是 0
. 这是代码:
JS/jQuery built into PHP function ajax-action()
$ = jQuery;
$('#platform').change(function(e) {
var data = {
action: 'action_cb',
type: 'POST',
dataType: 'json',
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log(errorThrown);
},
success: function(response) {
$('#user_id').val(response);
}
};
$.ajax(ajaxurl, data, function(data) {
$('#user_id').val(data);
});
e.preventDefault();
});
PHP functions and add-actions
add_action('wp_ajax_action_cb','action_cb');
add_action('admin_footer','ajax_action');
function action_cb() { $platform = 'test'; echo json_encode($platform); wp_die(); };
我的问题是:我该如何解决这个问题并防止它继续发生?我想返回实际结果,而不是 0
.
6 回答
根据wordpress文档:
https://codex.wordpress.org/AJAX_in_Plugins(参考文献"Error Return Values")
当Wordpress操作与使用add_action('wp_ajax_(action)',....定义的WordPress挂钩不匹配时,返回0)
要检查的事项:
你在哪里定义你的add_action('wp_ajax_action_cb','action_cb');?具体来说,你的插件代码的哪一部分?
你是否登录了wordpress?你提到了管理区域,所以我假设如此,但如果你不这样做,你必须使用add_action('wp_ajax_nopriv_ ',....)
此外,您没有共享与此相关的功能:add_action('admin_footer','ajax_action');
最后,为什么使用“json”作为数据类型?如果您尝试回显直接HTML,请将数据类型更改为“html” . 然后,您可以直接回显到页面(或作为您正在做的值) . 目前,您正在尝试将JSON对象作为表单中的值进行回显...
所以你的代码看起来像这样:
function action_cb(){$ platform ='test'; echo $ platform; p_die(); };
......而你的AJAX可能是:
试试这个:
可能你需要添加
https://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)
只需在你的
AJAX
做一些小改动 . 我假设你以管理员身份登录 . 用data:"action=action_cb",
替换数据对象中的action
为了防止WP在响应中添加零,我总是使用 die(); insted of wp_die();
和注册功能:
使用AJAX调用函数时使用 action: 'action_cb'
希望这可以帮助 . 我已经解释了在wp中使用ajax的标准方法 .
Wordpress: Passing data to a page using Ajax
好的,我现在已经在我自己的项目中重新创建了你的代码,并注意到你共享的javascript返回了ajax-object而不是结果 . 所以我想出来的是有点重写,但是当我尝试它时工作得很好 .
我希望这些评论足以说明它是如何运作的 . 注意我是如何使用 $j 而不是jQuery.noConflict模式的$ .