因此,对于我的AJAX标签,我有以下脚本:
<script>
jQuery(document).ready(function() {
jQuery('.royal_private_menu a').click(function(e) {
e.preventDefault();
var tab_id = jQuery('this').attr('id');
jQuery.ajax({
type: "GET",
url: "wp-admin/admin-ajax.php",
dataType: 'html',
data: ({ action: 'my_tab_menu', id: tab_id}),
success: function(data){
jQuery('#private_menu_'+tab_id).html(data);
},
error: function(data)
{
alert("Error!");
return false;
}
});
});
});
</script>
我在url: "wp-admin/admin-ajax.php"
时遇到以下错误,错误为example.com/wp-admin/admin-ajax.php?action=my_tab_menu 404 Not found
。
然后我将其更改为以下内容并收到相同的错误:url: "admin_url('admin-ajax.php')"
然后,example.com/admin_url('admin-ajax.php');?action=my_tab_menu 404 Not found
。
发生了什么事,我做错了什么?
由于
修改
这是我的档案:
所以我觉得我非常接近让Ajax工作,但是我收到了一个错误:
这是php:
<div class="royal_private_menu">
<a href="#private_menu" id="items_id">Items</a>
<a href="#private_menu_received_order_id" id="received_order_id">Received Order</a>
<a href="#private_menu_my_orders_id" id="my_orders_id">My orders</a>
<a href="#private_menu_points_id" id="points_id">Points</a>
<a href="#private_menu_setting_id" id="setting_id">Setting</a>
</div>
<div id="private_menu"> <!--Default page -->
<?php get_template_part('page-parts/03_private_items'); ?>
</div>
<div id="private_menu_received_order_id"> </div>
<div id="private_menu_my_orders_id"> </div>
<div id="private_menu_points_id"> </div>
<div id="private_menu_setting_id"> </div>
<script>
jQuery(document).ready(function() {
jQuery('.royal_private_menu a').click(function(e) {
e.preventDefault();
var tab_id = jQuery('this').attr('id');
jQuery.ajax({
type: "GET",
url: "<?php echo admin_url('admin-ajax.php'); ?>",
dataType: 'html',
data: ({ action: 'my_tab_menu', id: tab_id}),
success: function(data){
jQuery('#private_menu_'+tab_id).html(data);
},
error: function(data)
{
alert("Error!");
return false;
}
});
});
});
</script>
在我的function.php中:
function my_tab_menu() {
$template_part_path = 'page-parts/03_private_' . $_GET['id'];
get_template_part($template_part_path);
}
add_action('wp_ajax_my_tab_menu', 'my_tab_menu');
add_action('wp_ajax_nopriv_my_tab_menu', 'my_tab_menu');
这是我的文件名:
03_private_items.php
03_private_my_orders.php
03_private_points_id.php
03_private_received_order_id.php
03_private_setting_id.php
编辑2
我将success
更改为alert("Success!");
,我收到了Success
提醒。所以一切正常,除非它没有从其他php文件中获取任何数据。我错过了什么?
编辑3
使用console.log(data);
,这是我在控制台中看到的脚本:
jQuery(document).ready(function() {
jQuery('.royal_private_menu a').click(function(e) {
e.preventDefault();
var tab_id = jQuery('this').attr('id');
jQuery.ajax({
type: "GET",
url: "http://example.com/wp-admin/admin-ajax.php",
dataType: 'html',
data: ({ action: 'royal_private_tab', id: tab_id}),
success: function(data){
jQuery('#private_menu_'+tab_id).html(data);
console.log(data);
},
error: function(data)
{
alert("Error!");
return false;
}
});
});
});
答案 0 :(得分:1)
然后我将其更改为以下内容并收到相同的错误:
url: "admin_url('admin-ajax.php')"
然后,example.com/admin_url('admin-ajax.php');?action=my_tab_menu
404找不到。
如果URL包含文字字符串admin_url('admin-ajax.php');
,那么这意味着您的PHP未被解析。
尝试:
url: "<?php echo admin_url('admin-ajax.php'); ?>",
您也可以在排队脚本时使用wp_localize_script
设置ajax网址:
wp_enqueue_script( 'ajax-script', plugins_url( '/js/my_query.js', __FILE__ ), array('jquery') );
// in JavaScript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
wp_localize_script( 'ajax-script', 'ajax_object',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );
https://codex.wordpress.org/AJAX_in_Plugins#Separate_Javascript_File
在这种情况下,您可以像这样设置网址:
url: ajax_object.ajax_url,
这样做的好处是你不必内联你的javascript;你可以像往常一样排队JS文件。
来自评论:
所以,当我去example.com/wp-admin/admin-ajax.php时,我在空白页面上得到“0”。这正是ajax标签页上控制台上显示的内容。这是正常的吗?
获得0
结果或者意味着你的钩子没有附加到动作上,或者你的钩子没有产生输出而没有退出。
在你的JS中,你正在设置你的行动:
action: 'royal_private_tab'
在你的PHP中你宣告你的钩子是这样的:
add_action('wp_ajax_my_tab_menu', 'my_tab_menu');
add_action('wp_ajax_nopriv_my_tab_menu', 'my_tab_menu');
您需要在这两个地方使用royal_private_tab
或my_tab_menu
,例如:
add_action('wp_ajax_royal_private_tab', 'my_tab_menu');
add_action('wp_ajax_nopriv_royal_private_tab', 'my_tab_menu');
此外,您应该在挂钩结束时exit
:
function my_tab_menu() {
$template_part_path = 'page-parts/03_private_' . $_GET['id'];
get_template_part($template_part_path);
exit;
}