wordpress admin-ajax.php总是返回0

时间:2016-01-29 20:38:35

标签: php ajax wordpress

好的我觉得我已经正确设置了这个但是当我提出这个ajax请求时我仍然得到零回归,我觉得这可能是一个错字,而且我无法看到它的原因?

这是我的php类文件:

class class2 extends class1
{
    public static function init()
    {
        $class = __CLASS__;
        new $class;
    }

    public function __construct()
    {
        wp_enqueue_script('empty-ad-check', plugins_url('mc-error-alerts/js/mc-error-alerts.js'),array('jquery'),'1.0.0', true );
        wp_localize_script( 'empty-ad-check', 'ajax_send', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ));
        add_action('wp_ajax_sendEmptyAd', array( $this,'sendEmptyAdCallBack'));
    }

    public function sendEmptyAdCallBack()
    {
        echo 'My name is david';
    }
}

然后这应该链接到这个js文件:

jQuery(document).ready(function($) {

    $.post( ajax_send.ajaxurl , {action: 'sendEmptyAd', name: 'David'})
        .done(function( data ) {
            console.log('ajax request says: ' + data);
        });
});

1 个答案:

答案 0 :(得分:0)

有两种形式的挂钩,wp_ajax_(仅限管理员)和wp_ajax_nopriv_(公开)。

在您的情况下,您应该使用公共版本:

add_action( 'wp_ajax_nopriv_sendEmptyAd', array( $this, 'sendEmptyAdCallBack' ) );

请注意,回调应以wp_die()结尾:

public function sendEmptyAdCallBack()
{
    echo 'My name is david';

    wp_die();
}

我在我的环境中使用这些更改运行了您的代码并且它可以正常工作。

更新:这是完整的代码:

<强> myplugin.php

class MyPlugin_Controller
{
    public static function init()
    {
        $class = __CLASS__;
        new $class;
    }

    public function __construct()
    {
        wp_register_script( 'empty-ad-check', plugin_dir_url( __FILE__ ) . 'myplugin.js', array('jquery'), '1.0.0', true );
        wp_localize_script( 'empty-ad-check', 'ajax_send', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ));
        wp_enqueue_script( 'empty-ad-check' );

        add_action( 'wp_ajax_nopriv_sendEmptyAd', array( $this, 'sendEmptyAdCallBack' ) );
    }

    public function sendEmptyAdCallBack()
    {
        echo 'My name is david';

        wp_die();
    }
}
MyPlugin_Controller::init();

<强> myplugin.js

/*global ajax_send, console, jQuery */
jQuery(document).ready(function ($) {
    'use strict';

    $.post(ajax_send.ajaxurl, {action: 'sendEmptyAd', name: 'David'})
        .done(function (data) {
            console.log('ajax request says: ' + data);
        });
});