我有一张这样的表格:
<form method="post" action="" id="BookingForm">
<label for="email">Email</label>
<input type="text" name="email" id="emailId" value="" />
<input type="hidden" name="action" value="1" />
<input type="submit" name="submitname" value="Send" />
</form>
<div id="container"></div>
我的自定义js文件位于以下路径:assets/js/makebooking。jsMy JS文件
makebooking.js :
jQuery(document).ready(function(event) {
jQuery(\'#BookingForm\').submit(validateForms);
function validateForms(event) {
event.preventDefault();
var x = MBAjax.ajaxurl;
alert(x);
jQuery.ajax({
action: \'makeBooking\',
type: "POST",
url: MBAjax.admin_url,
success: function(data) {
alert(data);
//jQuery("#container" ).append(data);
},
fail: function(error){
alert("error" + error);
}
});
return false;
}
});
Functions.php 文件:
// embed the javascript file that makes the AJAX request
wp_enqueue_script( \'make-booking-ajax\',\'/wp-content/themes/twentyseventeen/assets/js/makebooking.js\', array( \'jquery\' ) );
// declare the URL to the file that handles the AJAX request (wp-admin/admin-ajax.php)
wp_localize_script( \'make-booking-ajax\', \'MBAjax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );
function makeBooking(){
echo "Home again";
return "Home";
}
add_action(\'wp_ajax_make_booking\', \'makeBooking\');
The problem is that the ajax call returns all the dom and not what the php function returns. The code in the php function does not work;
the echo message is not printed
<下图显示了问题:
谢谢
费德里科
<小时>
这是我的状态码和我对ajax的响应
最合适的回答,由SO网友:Alexander Holsgrove 整理而成
看起来像MBAjax.ajaxurl
和MBAjax.admin_url
可能未设置。如果它不能发布到正确的Wordpress处理程序,那么您可能会得到返回的404页HTML,而不是PHP函数返回值。
您可以通过将ajax url硬编码为url: "/wp-admin/admin-ajax.php",
看看这能不能解决问题。
其次,我总是在我的动作表单上添加一个隐藏字段<input type="hidden" name="action" value="make_booking">
试试看,你过得怎么样。同时检查浏览器控制台network
选项卡以查看正在发送的AJAX请求。您可以检查正在发布的数据以及收到的回复。比尝试使用警报更简单。
您还可以使用
console.log(x)
相反
更新:我认为您缺少在AJAX请求中发送任何内容:
jQuery.ajax({
action : \'make_booking\',
type : "POST",
data : {
action: \'make_booking\'
}
url : MBAjax.admin_url,
success: function(data) {
alert(data);
//jQuery("#container" ).append(data);
},
fail: function(error){
alert("error" + error);
}
});
试试看。
SO网友:Antti Koskinen
Ajax调用中的操作似乎不正确。根据wp_ajax_{action} 法典条目,
wp\\u ajax\\uhooks遵循“wp\\u ajax\\u$youraction”格式,其中$youraction是提交给admin ajax的“action”字段。php。
所以试着改变一下action: \'makeBooking\',
到action: \'make_booking\',
然后看看它是否有效。
如果希望ajax调用适用于未登录的用户,还可以使用wp_ajax_nopriv_{action} 行动挂钩。像这样
add_action(\'wp_ajax_nopriv_make_booking\', \'makeBooking\');
EDIT: 哦,我真傻。你也失踪了
wp_die();
从ajax响应结束时开始。看见
codex / AJAX in Plugins 了解更多详细信息。
function makeBooking(){
echo "Home again";
wp_die(); // this is required to terminate immediately and return a proper response
}
EDIT 2: 您也可以使用
wp_send_json
而不是回应你的回答。