我试图利用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
。
可能您需要添加
add_action('wp_ajax_nopriv_action_cb', 'action_cb');
https://codex.wordpress.org/plugin_api/action_reference/wp_ajax_(action)
根据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,因此不会调用方法。 以下是原始代码: 我希望它是这样的: 如你所见,我只更改了确认消息的位置。但是在第二种方式中,具有的条件似乎不是真的,因为我在文章中写的文本没有显示出来。 有人能帮我解