当前位置: 首页 > 知识库问答 >
问题:

WordPress中的AJAX仅返回0

井嘉胜
2023-03-14

我试图利用WordPress的admin-ajax特性来为一个插件构建一个动态管理面板选项集。从本质上讲,一旦从下拉菜单(Select/option menu)中选择了一个选项,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

共有2个答案

羊丰茂
2023-03-14

可能您需要添加

add_action('wp_ajax_nopriv_action_cb', 'action_cb');

https://codex.wordpress.org/plugin_api/action_reference/wp_ajax_(action)

那弘
2023-03-14

根据wordpress文档:

https://codex.wordpress.org/ajax_in_plugins(参考“错误返回值”)

当Wordpress操作与add_action('wp_ajax_(action)',....)定义的Wordpress钩子不匹配时,返回0

检查事项:

>

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

    你登录了WordPress吗?您提到了admin区域,所以我假设是这样的,但如果您没有提到,则必须使用add_action('wp_ajax_nopriv_{action}‘,....)

    此外,您没有共享与此绑定的函数:add_action('admin_footer','ajax_action');

    最后,为什么要使用“JSON”作为数据类型?如果您试图回显直接的HTML,请将数据类型更改为“HTML”。然后您可以直接回显到page(或者像您正在做的那样作为一个值)。当前,您正在尝试将一个JSON对象作为一个值回显为表单...

    因此您的代码看起来如下所示:

    函数action_cb(){$platform='test';echo$platform;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>
    

  •  类似资料:
    • 问题内容: 例如我有一个功能: 我怎样才能返回AJAX后得到的? 问题答案: 因为请求是异步的,所以您无法返回ajax请求的结果(而同步ajax请求是一个 糟糕的 主意)。 最好的选择是将自己的回调传递给f1 然后,您将像这样致电:

    • 请参考:http://www.kancloud.cn/manual/thinkphp/1719

    • 问题内容: 我在使用Ajax时遇到问题。 问题是,在获得ajax响应之前,它会返回cnt。因此它总是返回NULL。 有没有办法使正确的返回响应值? 谢谢! 问题答案: 由于AJAX请求是异步的,因此您的cnt变量将在请求返回并调用成功处理程序之前返回。 我建议重构您的代码以解决此问题。 一种方法是从AJAX请求的成功处理程序中调用调用了GetGrantAmazonItemCnt()的任何函数,此方

    • 问题内容: 我正在尝试使用Ajax从服务器获取信息。页面xxx.php是仅写入123的页面。但是,当我想返回该页面的内容时,它返回null。 问题答案: 请注意,ajax是“异步的”。因此,在myFunct()完成执行时,可能尚未收到对服务器调用的响应。您可以将处理来自服务器调用的数据的逻辑放在ajax的“成功”中。

    • 使用ajaxReturn方法返回JSON格式或者XML格式数据 $data['a'] = 'www'; $data['b'] = 'vvvc'; $this->ajaxReturn($data); //默认返回JSON格式数据

    • 在WordPress主题中,当一个联系人表单完成时,一条消息会写在页面上,但不会写在我想要的位置。但是当在PHP代码中更改消息的位置时,联系人表单中的段落(写在文章中)不再显示。事实上,我认为方法返回false,因此不会调用方法。 以下是原始代码: 我希望它是这样的: 如你所见,我只更改了确认消息的位置。但是在第二种方式中,具有的条件似乎不是真的,因为我在文章中写的文本没有显示出来。 有人能帮我解