2016-01-29 73 views
0

好吧,我觉得我已经正确设置了这一点,但当我发出这个ajax请求时,我仍然得到一个零返回,我觉得它可能是一个错字,我不能看到它?wordpress admin-ajax.php总是返回0

这是我的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); 
     }); 
}); 

回答

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(); 
} 

我与这些跑了你的代码在我的ENV变化和它的作品。

更新:下面是完整代码:

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); 
     }); 
}); 
+0

,你在做这一切的插件内?由于某种原因,我仍然返回0. –

+0

你是否正在调用'class2'的'init()'?我不得不在我的测试中添加它。 – masa

+0

是的,我将它添加到我的主类(或class1)的底部,如下所示:include'class2.php'; add_action('genesis_before_footer',array('class2','init')); –