bounty将在11小时后过期。回答此问题可获得+50的声誉奖励。hfw正在寻找来自声誉良好来源的答案:我正在寻找一个答案,因为它涉及到 AJAX javascript中使用作用域解析操作符php作为数据操作,通常我只使用单个函数名,但是对于作用域解析,我很难做到这一点。
这也适用于我如何使用wp_ AJAX _nopriv和wp_ajax_add_action
这是您在此场景中添加操作的方式吗?
add_action(“可扩展的Ajax计算器::基本选项”,“可扩展的计算器::基本选项”);
我已经有一段时间没有使用 AJAX 和Wordpress了,我以前做事的方式非常直接,使用functions.php中创建的函数名,然后使用以下命令添加操作:
add_action('wp_ajax_nopriv_myfunction', 'myfunction');
add_action('wp_ajax_myfunction', 'myfunction');
我在这里画了一个空白,因为现在我的PHP代码的结构有点不同,我的函数不再位于functions.php文件中,它位于一个名为:
ds_计算器
$.ajax({
type: 'POST',
url: my_ajax.ajaxurl,
data: { action : 'ds_calculators::myfunction', },
success: function(data, textStatus, XMLHttpRequest)
{
//jQuery('#table_listing').html(''); // empty an element
jQuery('.changer').html(data); // put our list of links into it
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
if (typeof console === "undefined")
{
console = {
log: function() {},
debug: function() {},
};
}
if (XMLHttpRequest.status == 404)
{
console.log('Element not found.');
}
else
{
console.log('Error: ' + errorThrown);
}
}
});
我现在添加这样的操作
add_action('wp_ajax_nopriv_myFunction', 'ds_calculators::myFunction');
add_action('wp_ajax_myFunction', 'ds_calculators::myFunction');
对于上面的问题,我遇到了一个400(坏请求)。当函数在一个类中时,如何包含函数名?这是我的问题还是其他问题?
3条答案
按热度按时间6ljaweal1#
JS端不需要指定类引用:
在php模板中,如果你的函数在类中,你需要通过引用它的示例($this)来指定它。
如果(myfuncntion)方法是静态的,那么您将使用类名为“ds_calculators::myfunction”的作用域运算符
请记住,
wp_ajax_nopriv_{$action}
会为注销的用户触发未经身份验证的 AJAX 操作。sgtfey8w2#
如果使用wp_ AJAX 钩子,就不需要太担心名称空间。
是告诉wordpress当一个请求被发送到默认 AJAX ,并将action设置为“myfunction”,以将其传递给解析时引用的回调函数时,唯一需要注意的是
wp_ajax_${your_function/action_name}
必须与解析时调用的函数相同,并且所讨论的方法必须是公共的Here是一篇关于如何在类中实现 AJAX 处理程序的很棒的文章,以及我从哪里偷来的
如果您有兴趣使用REST API与ajax API一起使用/代替 AJAX API,这里是我制作的一个快速类,用于介绍如何完成此操作,并显示该设置中的名称空间,同时介绍wp-nonce的基本知识
qybjjes13#
你应该修正你的 AJAX 调用,把 action 参数移到其他参数旁边,比如 type,url,success 而不是在 data 中。您只是声明了一个动作名,它与php类层次结构无关。实际的动作名连接到wp_ AJAX {action}和wp_ajax_nopriv{action}。这就是为什么动作名***myFunction***必须用作 add_action('wp_ AJAX _myFunction','ajax_callback');.更多信息,您可以在这里阅读:https://developer.wordpress.org/reference/hooks/wp_ajax_action/
转到PHP端...您可以通过两种方式调用类对象内部的方法:
1.如果它是一个普通的方法,你应该创建一个类对象的示例,然后将它用作数组,例如:
1.如果你不想初始化一个对象,你可以声明一个方法为static,这样你就可以直接通过名字调用一个方法,例如: