静态变量被WP AJAX操作覆盖,在没有AJAX的情况下运行良好

时间:2018-09-29 作者:tijmen

我正在编写一个脚本,该脚本将用于在导出大量数据时显示进度条。要想做到这一点,你需要知道你总共有多少个位置,并将这个数字保留在某个地方。

当我在WordPress之外运行下面的代码时,它就会按预期工作。

它显示此输出。

{"uncoded":"123"}
not null
not null
not null
not null 
它在第一个循环中为null,因此它获取值,然后设置$total值,因此它不再为null。但当我通过AJAX调用它时getTotal() 始终为空。第一次应该为null,但之后不能为null。它应该包含第二次尝试时的行总数。

这是我正在使用的代码。

class progress {

    private static $total = null;

    public function getTotal() {
        return self::$total;
    }

    public static function setTotal() {
        self::$total = \'123\';
    }
}

class batch extends progress {

    function __construct() {
        add_action( \'wp_ajax_batch_actions\',        array( $this, \'run\' ) );
        add_action( \'wp_ajax_nopriv_batch_actions\', array( $this, \'run\' ) );
    }

    public function run() {

        if ( is_null( $this->getTotal() ) ) {
            $this->setTotal();

            $total = $this->getTotal();
            echo json_encode( array( \'uncoded\' => $total ) );
        } else {
            echo \'not null\';
        }

        exit();
    }
}
我有点困惑,为什么在WordPress中没有AJAX的情况下这一切都很好,但一旦使用AJAX操作,它就无法记住美元的总值。它总是空的?

有人知道为什么,以及如何让它在AJAX中正常工作吗?

1 个回复
SO网友:Hans

可以使用PHP session:

class progress {

    public function __construct() {
        session_start();
    }

    public function getTotal() {
        return $_SESSION[ \'total\' ];
    }

    public static function setTotal() {
        $_SESSION[ \'total\' ] = \'123\';
    }
}
如果您正在做更复杂的事情,那么可以使用如下会话包装器Symfony\'s 也许是个好主意。

结束