Wordpress admin-ajax.php正在死“0”而没有处理功能

时间:2013-11-11 12:34:08

标签: javascript php jquery ajax wordpress

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

逻辑

  1. 点击#our-work a链接 [js]
  2. 获取帖子ID(来自data-id属性)&将其存储为postID变量 [js]
  3. 通过AJAX传递postID(使用WP的admin-ajax.php文件) [js]
  4. example_ajax_request功能会选择ID&只需回显它 [php]
  5. 如果成功,请将服务器响应附加到#hero div。
  6. 我意识到这没有任何好处,但是一旦我开始工作,我将修改功能以达到真正的目的。

    我的代码

    以下是我在plugins文件夹中创建的函数的副本:

    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 :(得分:6)

这是我可以自豪地说的极少数时间之一......这里没有任何问题!

服务器返回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' );