AJAX(admin_url(’admin-ajax.php’);? action =)未找到

所以对于我的AJAX选项卡,我有以下脚本:

 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; } }); }); });  

我在url: "wp-admin/admin-ajax.php"遇到以下错误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 url: "admin_url('admin-ajax.php')" example.com/admin_url('admin-ajax.php');?action=my_tab_menu 404 Not found

发生了什么事,我做错了什么?

谢谢

编辑

这是我的文件:

所以我觉得我真的很接近让Ajax工作,但我收到一个错误:

这是php:

  
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: "", 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; } }); }); });

在我的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; } }); }); }); 

然后我将其更改为以下内容并得到相同的错误: url: "admin_url('admin-ajax.php')"然后, example.com/admin_url('admin-ajax.php');?action=my_tab_menu url: "admin_url('admin-ajax.php')" 404 Not找到。

如果URL包含文字字符串admin_url('admin-ajax.php'); 那意味着你没有解析PHP。

尝试:

 url: "", 

在排队脚本时,也可以使用wp_localize_script设置ajax URL:

 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:

 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_tabmy_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; }