AJAX(ADMIN_URL(“管理-ajax.php');?行动=)未找到 [英] AJAX (admin_url('admin-ajax.php');?action=) Not Found
问题描述
所以我的Ajax选项卡我有以下脚本:
<脚本>
jQuery的(文件)。就绪(函数(){
jQuery的('。royal_private_menu一)。点击(函数(五){
即preventDefault();
VAR tab_id =的jQuery(本)ATTR('身份证')。
jQuery.ajax({
键入:GET,
网址:可湿性粉剂管理员/管理员-ajax.php
数据类型:HTML,
数据:({行动:my_tab_menu,ID:tab_id}),
成功:功能(数据){
jQuery的('#private_menu _'+ tab_id)。html的(数据);
},
错误:功能(数据)
{
警报(错误!);
返回false;
}
});
});
});
< / SCRIPT>
我得到了以下错误与 URL:可湿性粉剂管理员/管理员-ajax.php
,误差 example.com/wp-管理员/管理员-ajax.php?行动= my_tab_menu 404未发现
。
然后,我把它改成下面的,并得到了同样的错误: URL:ADMIN_URL(管理-ajax.php),
那么, example.com/admin_url(管理-ajax.php');?行动= my_tab_menu 404未发现
。
这是怎么回事,什么我做错了?
感谢
修改
下面是我的文件:
所以,我觉得我真的很接近得到阿贾克斯工作,但我得到一个错误:
下面是PHP的:
< DIV CLASS =royal_private_menu>
&所述; A HREF =#private_menuID =items_id>项目< / a取代;
&所述; A HREF =#private_menu_received_order_idID =received_order_id>收到的订货及所述; / a取代;
< A HREF =#private_menu_my_orders_idID =my_orders_id>我的订单和LT; / A>
&所述; A HREF =#private_menu_points_idID =points_id>积分和所述; / a取代;
&所述; A HREF =#private_menu_setting_idID =setting_id>设置&所述; / a取代;
< / DIV>
< DIV ID =private_menu> <! - 默认页面 - >
< PHP get_template_part(页面零部件/ 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>
<脚本>
jQuery的(文件)。就绪(函数(){
jQuery的('。royal_private_menu一)。点击(函数(五){
即preventDefault();
VAR tab_id =的jQuery(本)ATTR('身份证')。
jQuery.ajax({
键入:GET,
网址:?< PHP的回声ADMIN_URL(管理-ajax.php');>中,
数据类型:HTML,
数据:({行动:my_tab_menu,ID:tab_id}),
成功:功能(数据){
jQuery的('#private_menu _'+ tab_id)。html的(数据);
},
错误:功能(数据)
{
警报(错误!);
返回false;
}
});
});
});
< / SCRIPT>
和我的function.php:
函数my_tab_menu(){
$ template_part_path =页面零部件/ 03_private_。 $ _GET ['身份证'];
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
我改变了成功
到警报(成功!);
和我的成功
警报。所以,一切正常,除了它是不获取来自其他PHP文件中的任何数据。我在想什么?
修改3
使用的console.log(数据);
,这是我在控制台中看到脚本:
jQuery的(文件)。就绪(函数(){
jQuery的('。royal_private_menu一)。点击(函数(五){
即preventDefault();
VAR tab_id =的jQuery(本)ATTR('身份证')。
jQuery.ajax({
键入:GET,
网址:http://example.com/wp-admin/admin-ajax.php
数据类型:HTML,
数据:({行动:royal_private_tab,ID:tab_id}),
成功:功能(数据){
jQuery的('#private_menu _'+ tab_id)。html的(数据);
的console.log(数据);
},
错误:功能(数据)
{
警报(错误!);
返回false;
}
});
});
});
然后,我把它改成下面的,并得到了同样的错误:
URL:ADMIN_URL(管理-ajax.php),
那么,example.com/admin_url(管理-ajax.php');?行动= my_tab_menu
404未找到。
如果该URL中包含的文字串 ADMIN_URL(管理-ajax.php');
那么这意味着你的PHP没有被解析。
尝试:
URL:?< PHP的回声ADMIN_URL(管理-ajax.php');>中,
您也可以使用 wp_localize_script
当你入队一个脚本来设置AJAX网址:
wp_enqueue_script(AJAX脚本,plugins_url('/js/my_query.js,__FILE__),阵列('jQuery的'));
//在JavaScript中,对象的属性来访问为ajax_object.ajax_url,ajax_object.we_value
wp_localize_script(AJAX脚本,ajax_object,
阵列('ajax_url'=> ADMIN_URL(管理-ajax.php'),'we_value'=> 1234));
HTTPS://$c$cx.word$p$pss。组织/ AJAX_in_Plugins#Separate_Javascript_File
在这种情况下,你会设置这样的网址:
网址:ajax_object.ajax_url,
做这种方式的好处是,你不必内嵌您的JavaScript;你可以排队一个JS文件,就像你通常会。
从注释:
所以,当我去example.com/wp-admin/admin-ajax.php~~V我得到0的空白页上。而这正是显示了ajax标签页上的控制台上。它是正常的吗?
获取一个 0
结果要么意味着你的钩未连接到动作或钩没有输出,并没有退出。
在你的JS,你设置你的行动是这样的:
的行动: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');
此外,你应该退出
在你的钩子结束:
函数my_tab_menu(){
$ template_part_path =页面零部件/ 03_private_。 $ _GET ['身份证'];
get_template_part($ template_part_path);
出口;
}
So for my AJAX tabs I have the following script:
<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>
I got following error with url: "wp-admin/admin-ajax.php"
and the error is example.com/wp-admin/admin-ajax.php?action=my_tab_menu 404 Not found
.
Then I changed it to the following and got the same error: url: "admin_url('admin-ajax.php')"
then, example.com/admin_url('admin-ajax.php');?action=my_tab_menu 404 Not found
.
What is going on and what am I doing wrong?
Thanks
EDIT
Here is my files:
So I feel like I am really close to getting Ajax working but I am getting an error:
Here is 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>
And in my 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');
And here is my file names:
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
EDIT 2
I changed the success
to alert("Success!");
and I got the Success
alert. So everything is working except it is not fetching any data from other php files. What am I missing?
EDIT 3
With console.log(data);
, this is the script that I see in the console:
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;
}
});
});
});
Then I changed it to the following and got the same error:
url: "admin_url('admin-ajax.php')"
then,example.com/admin_url('admin-ajax.php');?action=my_tab_menu
404 Not found.
If the URL contains the literal string admin_url('admin-ajax.php');
then that means you PHP isn't being parsed.
Try:
url: "<?php echo admin_url('admin-ajax.php'); ?>",
You can also use wp_localize_script
to set the ajax URL when you enqueue a script:
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
In this case you would set the URL like this:
url: ajax_object.ajax_url,
The advantage of doing it this way is that you don't have to inline your javascript; you can just enqueue a JS file like you normally would.
From the comments:
So, when I went to example.com/wp-admin/admin-ajax.php I get "0" on a blank page. And that is exactly what is shown on the console on the ajax tab page. Is it normal?
Getting a 0
result either means your hook is not attached to the action or your hook generates no output and fails to exit.
In your JS, you're setting your action like this:
action: 'royal_private_tab'
In your PHP your declaring your hooks like this:
add_action('wp_ajax_my_tab_menu', 'my_tab_menu');
add_action('wp_ajax_nopriv_my_tab_menu', 'my_tab_menu');
You need to either use royal_private_tab
or my_tab_menu
in both places, ex:
add_action('wp_ajax_royal_private_tab', 'my_tab_menu');
add_action('wp_ajax_nopriv_royal_private_tab', 'my_tab_menu');
Also, you should exit
at the end of your hook:
function my_tab_menu() {
$template_part_path = 'page-parts/03_private_' . $_GET['id'];
get_template_part($template_part_path);
exit;
}
这篇关于AJAX(ADMIN_URL(“管理-ajax.php');?行动=)未找到的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!