WordPress注册自定义Ajax事件,以及POST请求400报错的处理办法
June 2, 2023 [ 上次更新于 10 月前 ]
288 0 无人评论
WordPress支持用户注册自己的Ajax方法,这个很简单,以下是一个栗子:
//已登录用户执行
add_action('wp_ajax_demo_ajax', 'demo_ajax_echo');
//未登录用户执行
add_action('wp_ajax_nopriv_demo_ajax','demo_ajax_echo');
function demo_ajax_echo(){
if(isset($_POST['check_it'])){
echo 'Success!';
}
die();
}
其中,wp_ajax_
和wp_ajax_nopriv_
后面的demo_ajax
就是这个函数的请求参数(action)。
WordPress会根据action参数来判断应该执行哪个Aajax事件,所以这个参数应该是唯一的。
WordPress在执行Ajax请求的时候每次都会输出0或1(false或true)作为结果,如果不需要,则需要在函数处理完成后执行die或者exit提前结束。
前台请求的接口统一为admin-ajax.php
,为了方便使用,我们可以在WordPress中定义一下这个地址。
wp_localize_script('new-js', 'my_ajax_demo', array('ajax_url' => admin_url('admin-ajax.php')));
于是问题就来了,前台请求的时候一直返回400错误,然后输出结果'0'
研究了一下,发现虽然WordPress的文档里虽然说请求的时候需要带上action参数就可以,但实际上WordPress对于请求格式是有要求的,以下是一个jQuery的栗子:
<input name="check_it" class="form-control" id="check_it" type="text" placeholder="" required="" aria-required="true">
<button class="btn" id="check" type="submit" >查询</button>
<div class="info-back"></div>
<!--JS-->
<script type="text/javascript">
jQuery(document).ready(function ($) {
$("#check").click(function (){
var this = $("#check_it").val();
if (this != undefined) {
$.ajax({
url: my_ajax_demo.ajax_url,
type: "POST",
dataType: "HTML",
data: {
action: "demo_ajax",
"check_it": this ,
},
success: function(data){
$(".info-back").html(data);
}
});
}
});
});
</script>
使用GET请求,或者后端Curl请求的方法就不列举了,总之传入的数据必须带上action参数,因为jQuery不会严格检查字符串,所以写的很随意。
如果是用其他前端调用的话需要注意传入和传出时候的数据格式,否则也会报400错误,这种情况下其实用RestAPI更省事,但是RestAPI默认不会鉴权,容易遭到滥用,也得注意。
另外,这个接口不支持直接提交from表单,如果非得提交的话先将数据处理成json的格式才行。如果是登录注册的表单直接提交给wp-login.php比较省事。
站点声明:本站部分内容转载自网络,作品版权归原作者及来源网站所有,任何内容转载、商业用途等均须联系原作者并注明来源。
评论列表 0
暂无评论