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

时间:2015-07-14 15:42:18

标签: php jquery ajax wordpress

因此,对于我的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;
        }  

        }); 

 }); 
 });

1 个答案:

答案 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_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;
}