javascript - WordPress 中的 AJAX 仅返回 0

标签 javascript php jquery ajax wordpress

我正在尝试利用 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

要检查的事情:

  1. 您在哪里定义 add_action('wp_ajax_action_cb','action_cb');? 具体来说,您的插件代码的哪一部分?

  2. 您登录到 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/

相关文章:

jquery 验证器与 asp.net

javascript - 滚动jquery更改html标题标签背景图像

javascript - rails 5 : Nested forms and existing associated objects

javascript - JavaScript 是多线程的吗?

php - 使用PHP将CSV中的数据插入MySQL时如何处理奇怪的数字

PHP foreach 循环 JSON

php - PHP 中的便捷构造函数

jQuery ajax 完成 : Is there a way to tell which Javascript function executed the ajax call?

javascript - 使用 iPad 倾斜横向 move 图像

javascript - 显示数据表中的 0 个条目中的 0 到 0 个