具有多个类实例的WP_AJAX处理程序

时间:2014-08-27 作者:mybecks

八个月前,我问了几乎相同的问题there. 但到目前为止,这个问题仍然没有得到解决。

但我还有一个想法,为什么它会失败。在此期间,我的代码得到了改进。我有多个具有相同结构的类:

<?php
class McCustomPost { ... }
$wpMcCustomPost = new McCustomPost();
?>
...
<?php
class McAdmin { ... }
$wpMcAdmin = new McAdmin();
?>
然后我有了我的“starter”文件,它需要所有文件,并且有插件头:

<?php
/*
Plugin Name: MC 2.0
Plugin URI: ...
Description: ...
Version: 0.0.75
Author: ...
Author URI: ...
License: GPL2
*/

define( \'MC_PLUGIN_DIR\', plugin_dir_path( __FILE__ ) );

require_once( MC_PLUGIN_DIR . \'class.mc.php\'               );
require_once( MC_PLUGIN_DIR . \'class.mc-admin.php\'          );
...
require_once( MC_PLUGIN_DIR . \'class.mc-custom-post.php\' );

register_activation_hook( __FILE__, array( \'Mc\', \'plugin_activation\' ) );
register_deactivation_hook( __FILE__, array( \'Mc\', \'plugin_deactivation\' ) );

$wpMc = new Mc();
?>
require_once admin和custom post类得到了正确的实例化。但是,当我从admin类发出ajax请求时,返回的请求较新。它到达了JS文件,但在那之后没有调用回调,我想没有找到它。

<?php
class McAdmin {
    protected $pluginPath;
    private $dbHandler;  

    public function __construct()  {
        $this->pluginPath = dirname(__FILE__);

        add_action( \'admin_enqueue_scripts\', array( $this,\'add_admin_scripts\') ); 
        add_action( \'wp_ajax_blubb\', array( $this, \'add_vehicle\' ) );  
    }

    public function add_admin_scripts( ){
        wp_enqueue_script( \'admin_scripts\', plugins_url( \'js/functions.admin.js\', __FILE__ ),   array(\'jquery\') );

        // wp_localize_script(\'admin_scripts\', \'ajax_var\', array(  
        // \'nonce\' => wp_create_nonce( \'ajax-nonce\' )  
        // ) );
    }

    public function add_vehicle()  
    {  
        // $nonce = $_POST[\'nonce\'];  

        // if ( ! wp_verify_nonce( $nonce, \'ajax-nonce\' ) )  
        //     die ( \'Busted!\');

        $title = $_POST[\'id\'];
        wp_die("Post Id: " . $title);
        exit;  
    }
...
}
$wpMcAdmin = new McAdmin();
?>
我的JS文件-未执行成功回调。。。

$(\'.add-vehicle\').click(function(){
        var data = {
            action: "blubb",
            // nonce: ajax_var.nonce,
            id: 1
        };

        $.post(
            ajaxurl,
            data,
            function( response ) { //on success
                alert(\'Server response from the AJAX URL \' + response);
        });
});
我想,在McAdmin() 内部类别Mc() 回拨的电话不知道该回哪里。如何在正确的类实例中获取回调(McAdmin())?

感谢(&A);BR,

麦贝克

2 个回复
SO网友:TheDeadMedic

你的McAdmin 看起来不错-问题可能是以下两个原因之一:

另一个AJAX钩子blubb 正在终止之前的脚本McAdmin::get_vehiclewp_ajax_nopriv_blubb - 对于未登录的AJAX请求(否则会以静默方式失败)如果两者都不是原因,则需要进行一些HTTP检查(我使用Firebug或HttpFox),并调试服务器对AJAX请求的响应。

SO网友:mybecks

我最终解决了这个问题,我的问题是我忘了将结果发送回JS文件。我现在用:

public function add_vehicle()
{
        ....
        $response = json_encode( $POST ); //as sample

        // response output -> sent back to javascript file
        header( "Content-Type: application/json" );
        echo $response;

        die();
}
我也忘了die(); 在函数末尾。

结束

相关推荐

WP使用AJAX加载帖子并应用同位素

I ma使用Ajax Load More 为了得到我的帖子并在前端展示,我将同位素应用于这些项目。当我第一次展示一些项目和应用同位素时,它工作得很好。但当我第二次用ajax加载post并尝试应用同位素时,同位素不起作用,post被覆盖。有人能在这方面帮助我吗?