【问题标题】:AJAX (admin_url('admin-ajax.php');?action=) Not FoundAJAX (admin_url('admin-ajax.php');?action=) 未找到
【发布时间】:2015-07-14 15:42:17
【问题描述】:

所以对于我的 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;
        }  

        }); 

 }); 
 });

【问题讨论】:

  • 在 wordpress 函数中的任何地方都定义了动作吗?
  • 嗯,我在function.php中添加了我的内容

标签: php jquery ajax wordpress


【解决方案1】:

然后我将其更改为以下并得到相同的错误: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');,那么这意味着您的 PHP 没有被解析。

试试:

url: "<?php echo admin_url('admin-ajax.php'); ?>",

您还可以在将脚本入队时使用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 文件排入队列。

来自cmets:

所以,当我访问 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;
}

【讨论】:

  • 谢谢。我不再收到任何错误,但仍然没有结果。我添加了所有的 php、脚本和函数代码。你看到我做错了吗?
  • 在你的成功函数中,添加console.log(data),看看你在控制台中得到了什么。
  • 嗯,我没有得到结果.. 我有以下内容:success: function(data){ jQuery('#private_menu_'+tab_id).html(data); console.log(data); }, 然后当我检查调试时,没有结果。嗯,我一脸懵逼。哈哈。
  • 您的控制台中没有任何记录?您应该在响应中获得一些价值。尝试在错误处理程序中调用console.log(data)
  • 是的,所以我尝试了这些,但仍然没有成功(它只显示0)。我还能尝试什么?我还包括了我在控制台中看到的内容。
猜你喜欢
  • 2017-09-12
  • 1970-01-01
  • 2020-01-13
  • 2014-04-30
  • 2021-02-11
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多