Ajax with OOP doesn't work

时间:2011-02-23 作者:Anh Tran

我在theme的functions.php 使用ajax的文件,原理如下:

add_action(\'admin_head\', \'rw_script\');
function rw_script() {
    echo \'
    <script type="text/javascript">
        // delete image
        $(".delete_image").click(function(){
            var data = $(this).attr("rel");
            $.post(
                ajaxurl,
                {action: \\\'rw_delete_image\\\', data: data}, function(response){
                    alert(response); // debug
                }
            );

            return false;
        });
    });
    </script>\';
}
function delete_image() {
    if (isset($_POST[\'attach_id\'])) wp_delete_attachment($_POST[\'attach_id\']);
        die();
}
add_action(\'wp_ajax_rw_delete_image\', \'delete_image\');
它工作得很好。但当我将其转换为OOP时,ajax不起作用:

class RW_Test {
    function __construct() {
        add_action(\'admin_head\', array(&$this, \'rw_script\'));
        add_action(\'wp_ajax_rw_delete_image\', array(&$this, \'delete_image\'));
    }
    function rw_script() {
        echo \'
        <script type="text/javascript">
            // delete image
            $(".delete_image").click(function(){
                var data = $(this).attr("rel");
                $.post(
                    ajaxurl,
                    {action: \\\'rw_delete_image\\\', data: data}, function(response){
                        alert(response); // debug
                    }
                );

                return false;
            });
        });
        </script>\';
    }
    function delete_image() {
        if (isset($_POST[\'attach_id\'])) wp_delete_attachment($_POST[\'attach_id\']);
            die();
    }
}
javascript工作正常,即当我单击删除链接时,数据被正确发送。但删除图像的操作未启动。

你知道怎么解决这个问题吗?请帮帮我。非常感谢。

3 个回复
最合适的回答,由SO网友:Anh Tran 整理而成

这是一个很长的时间以来,这个问题,现在我的代码已经改变了很多。但在重新查看代码后,我认为请求应该是:

$.post(
    ajaxurl,
    {action: \'rw_delete_image\', attach_id: data}, function(response){
         alert(response); // debug
    }
);
not {action: \'rw_delete_image\', data: data}.

SO网友:mtekk

您需要创建该类的新实例,以便调用构造函数并注册操作。e、 g.您需要添加以下内容$test = new PR_Test; 低于PR\\U测试的定义。

SO网友:danblaker

它应该起作用;我在两个不同风格的自定义post-type类中成功地完成了完全相同的事情。您的原始RW\\U测试对象有可能被覆盖,或者您在其他地方使用了相同的变量名?

无论如何,开始故障排除的一个好地方是查看所有活动挂钩,以确保在启动ajax调用时“wp\\u ajax\\u rw\\u delete\\u image”操作处于活动状态(并与正确的rw\\u测试对象配对)。我建议this hooks debugger 从Rarst返回管理页面中的活动挂钩。

结束