Wordpress admin-ajax.php 在没有处理功能的情况下正在死亡“0”

Posted

技术标签:

【中文标题】Wordpress admin-ajax.php 在没有处理功能的情况下正在死亡“0”【英文标题】:Wordpress admin-ajax.php is dying "0" without processing function 【发布时间】:2013-11-23 06:19:28 【问题描述】:

我正在尝试学习如何以正确的方式在 Wordpress 中处理 AJAX 请求。为此,我正在调整 this tutorial 以创建一个超级简单的 AJAX 请求,以将帖子的 ID(来自链接)放入我的页面内容中。

逻辑

    点击#our-work a链接时[js] 获取帖子 ID(来自 data-id 属性)并将其存储为 postID 变量 [js] 通过 AJAX 传递 postID(使用 WP 的 admin-ajax.php 文件)[js] example_ajax_request 函数将获取 ID 并简单地回显它 [php] 如果成功,将服务器响应附加到#hero div。

我意识到这没有任何好处,但是一旦我开始工作,我将修改该功能以达到真正的目的。

我的代码

这是我在插件文件夹中创建的函数的副本:

wp_enqueue_script( 'my-ajax-request', plugin_dir_url( __FILE__ ) . 'acl-plugin.js', array( 'jquery' ) );

wp_localize_script( 'my-ajax-request', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );

function example_ajax_request() 
    if ( isset($_REQUEST) ) 
        $postID = $_REQUEST['postID'];
        echo $postID;
    
    die();

add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );

这里是JS文件的副本

jQuery(document).ready(function($) 
    $('#our-work a').click( function() 
        var postID = $(this).attr("data-id");

        $.ajax(
            url: MyAjax.ajaxurl,
            data: 
                'action':'example_ajax_request',
                'postID' : postID
            ,
            success:function(data) 
                $('#hero').append( "Well this seems to work" + data );
            ,
            error: function(errorThrown)
                console.log("This has thrown an error:" + errorThrown);
            
        );
        return false;
    );
);

问题

点击链接后,JS 会触发,但会产生以下响应:

<div id="hero">
    Well this seems to work 0
</div>

使用警报,我知道在 AJAX 请求之前正在获取 ID。所以问题出在我的功能上。为了了解更多信息,我(暂时)调整了 WP 的 admin-ajax.php 文件,以便我可以找出哪个 die(); 产生了“0”的响应。

这是文件中最后一个我认为不会触发的文件,因为我自己的函数中有一个die(); 命令。有人可以指出我哪里出错了吗?

【问题讨论】:

【参考方案1】:

这是我可以自豪地说的罕见情况之一......这里没有任何问题!

服务器返回0 的原因是因为我已登录! wp_ajax_nopriv_example_ajax_request 仅适用于登录的用户。注销后一切正常。

所以如果你想做同样的事情,只要确保你在函数下面有两个动作:

add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );
add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );

【讨论】:

非常感谢! wp_ajax_nopriv 是我失踪的那个。救了我。谢谢兄弟!!!

以上是关于Wordpress admin-ajax.php 在没有处理功能的情况下正在死亡“0”的主要内容,如果未能解决你的问题,请参考以下文章

AJAX 请求:/wp-admin/admin-ajax.php 403

admin-ajax.php?action=woocommerce_feature_product 403 错误

wordpress的ajax请求

如何在wordpress中用php编写ajax?

使用 Ajax 退出 Wordpress

wordpress 使用ajax方法