我正在使用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();
}
}
最佳答案
全局关键字应该在您要使用它的函数内,如下所示:
原文链接:https://www.f2er.com/jquery/428354.htmlpublic function get_current_formvalues() {
global $wp_session;
return $wp_session['formvalues'];
}
public function set_formvalues() {
global $wp_session;
//Default values for form
目前编写的方式,$wp_session在调用时无法使用.
您可以在http://php.net/manual/en/language.variables.scope.php阅读更多内容