php – 是否可以在ajax调用和普通请求之间交换会话数据? (在WordPress中)

前端之家收集整理的这篇文章主要介绍了php – 是否可以在ajax调用和普通请求之间交换会话数据? (在WordPress中)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用https://wordpress.org/plugins/wp-session-manager/插件,如果我只是设置并获取变量,它就可以工作. (所以实际的会话管理工作)

我想要的是在ajax调用和“浏览器的正常请求”之间交换会话数据.这甚至可能吗?

的functions.PHP

add_action( 'wp_ajax_nopriv_set_formvalues',array ('FormHandler','set_formvalues') );
add_action( 'wp_ajax_set_formvalues','set_formvalues') );

//Use of Plugin WP Session manager (so we can use sessions for storing current form values)                
//(do this with ajax before submitting the form)
global $wp_session;
$wp_session = WP_Session::get_instance();        
$formhandler = new FormHandler();

class FormHandler {                
        public function get_current_formvalues() {
                return $wp_session['formvalues'];
        }

        public function set_formvalues() {           
                //Default values for form
                $formvalues = array('name' => '','address' => '','plz' => '','city' => '','phone' => '','fax' => '','contactfirstname' => '','contactlastname' => '','contactanrede' => '','email' => '','contactphone' => '','recall' => '','newsletter' => '','messageText' => '');

                //Change values in formvalues-array if values are posted
                foreach($formvalues as $key => $value) {
                        if (isset($_POST[$key])) {
                                $formvalues[$key] = $_POST[$key];
                        }
                }
                $wp_session['formvalues'] = $formvalues;       
                echo json_encode( $wp_session );
                die(); //Needed for wordpress ajax
        }

    public function __construct() {
        $formvalues = $this->get_current_formvalues();
        echo $formvalues //doesn't echo out nothing
    }

}

$n = new FormHandler(); //doesn't echo out anything

等等…

从javascript我通过ajax调用set_formvalues()并正确返回值(作为json).

我必须将表单提交到另一个域,但在我必须以某种方式保存formvalues之前,因为我发布的域重定向了我的页面,但只有状态代码.我的想法是我可以通过ajax发送这些formvalues,然后在下次访问我的页面获取它们,这样如果用户犯了一个错误,访问者将不必填写所有值.

是否有可能在ajax调用和正常请求之间进行交换,然后我将如何实现呢? unfornutenaly我必须忍受“来自其他服务器的重定向解决方案”.也许这是可能的但是我做错了什么呢?有任何想法吗?

UPDATE
即使我使用全局变量,我也不满意.它真的不喜欢全局变量,但我以前想不到这样做的方法,但现在我有一个解决方案,如果有人偶然遇到类似的问题,我认为我想与你分享

class FormHandler {      
        private $wp_session = null; //Use of Plugin WP Session manger,so we can handle sessions

        public function get_current_formvalues() {
                return $this->wp_session['formvalues'];
        }

        public function set_formvalues() {    
                if ($this->wp_session === null) {
                    $this->wp_session = WP_Session::get_instance();                
                }

                //set $formvalues based on posted fields...

                $this->wp_session['formvalues'] = $formvalues;

                echo json_encode( $this->wp_session );
                die(); //Needed for wordpress ajax
        }

        public function __construct() {                
                //This makes it possible to use $this within function set_formvalue when using ajax in wordpress    
                add_action( 'wp_ajax_nopriv_set_formvalues',array ( $this,'set_formvalues') );
                add_action( 'wp_ajax_set_formvalues',array  ($this,'set_formvalues') );                
                $this->wp_session = WP_Session::get_instance();
        }

        public function display_contactform() {
                $formvalues = $this->get_current_formvalues();
        }
}
最佳答案
全局关键字应该在您要使用它的函数内,如下所示:

public function get_current_formvalues() {
        global $wp_session;
        return $wp_session['formvalues'];
}

并在set方法添加

 public function set_formvalues() {
         global $wp_session;           
         //Default values for form

目前编写的方式,$wp_session在调用时无法使用.
您可以在http://php.net/manual/en/language.variables.scope.php阅读更多内容

原文链接:https://www.f2er.com/jquery/428354.html

猜你在找的jQuery相关文章