我正在尝试利用 WordPress 的 admin-ajax 功能来为插件构建动态管理面板选项集。从本质上讲,一旦从下拉菜单(选择/选项菜单)中选择了一个选项,PHP 函数将对它上方的下拉菜单进行排序并显示更多的下拉菜单。我从一个简单的返回开始,我希望以后可以使用它,但我似乎无法在不遇到 unidentified
问题的情况下打印出文本。
我设置的 AJAX 显示 200 状态,但响应从未建立,我得到的结果是 0
。这是代码:
JS/jQuery 内置于 PHP 函数 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 函数和添加操作
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
。
最佳答案
根据 wordpress 文档:
https://codex.wordpress.org/AJAX_in_Plugins (引用“错误返回值”)
当 Wordpress 操作与使用 add_action('wp_ajax_(action)',....) 定义的 WordPress 钩子(Hook)不匹配时返回 0
要检查的事情:
您在哪里定义 add_action('wp_ajax_action_cb','action_cb');? 具体来说,您的插件代码的哪一部分?
您登录到 wordpress 了吗?您提到了管理区域,所以我假设是这样,但如果您不是,则必须使用 add_action('wp_ajax_nopriv_{action}', ....)
此外,您没有共享与此关联的函数: add_action('admin_footer','ajax_action');
最后,为什么要使用“json”作为数据类型?如果您尝试直接回显 HTML,请将数据类型更改为“html”。然后你可以直接回显到页面上(或者作为你正在做的一个值)。目前,您正在尝试将 JSON 对象作为表单中的值回显...
所以你的代码看起来像这样:
函数 action_cb() { $platform = 'test'; echo $平台; p_die(); };
...而您的 AJAX 可能是:
<script type = "text/javascript">
jQuery.ajax({
url: ajaxurl,
type: 'post',
data: {'action' : 'action_cb'},
success: function (data) {
if (data != '0' && data != '-1') {
{YOUR SUCCESS CODE}
} else {
{ANY ERROR HANDLING}
}
},
dataType: 'html'
});
</script>
试试这个:
<script>
$ = jQuery;
$('#platform').change(function(e) {
var data = {
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();
});
</script>
关于javascript - WordPress 中的 AJAX 仅返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39145199/