我正在使用jQuery UI手风琴作为我正在构建的网站的子区域。问题是我还没有找到一种维护页面间状态的好方法。我想知道最好的方法是什么。
我曾想过将手风琴的索引存储在数据库中,但对于像这样的问题来说,这似乎过于复杂。有没有更好的办法?显然,cookie和会话,但对于一个subnav ...任何想法都同样复杂?
编辑:这是我的代码
$.post(
accordion_ajax.ajaxurl,
{
type : 'GET',
action : 'accordion_ajax'
},
function(data){
$(".accordion-main").accordion('option', 'collapsible', true);
$(".accordion-main").accordion('option', 'active', 0);
// the accordion just does not work inside this ajax call, but if I put it outside the ajax call it works fine. Any thoughts?
}
);
$(".accordion-main").accordion({
change: function(event, ui){
$.post(
accordion_ajax.ajaxurl,
{
type : 'SET',
action : 'accordion_ajax',
data : $(".accordion-main").accordion('option', 'active')
}
);
}
});
答案 0 :(得分:1)
这就是我要做的事情:
在accordion的change()处理程序中,我会通过AJAX调用将当前accordion部分的索引发送到服务器:
$( "#AccordionID" ).accordion({
change: function(event, ui) {
$.ajax({
type:'POST',
url: 'urlToPhpScript.php',
data:'function=setAccordion&selectedAccordionSection='+ $("#AccordionID").accordion('option', 'active')
});
}
});
在服务器端,我会将此值存储在用户会话中:
<?php
// urlToPhpScript.php
session_start();
if($_GET['function']=='getAccordion') {
if(isset($_SESSION['currentAccordion'])) {
return $_SESSION['currentAccordion'];
} else {
return 0;
}
}
if($_POST['function']=='setAccordion') {
$_SESSION['currentAccordion'] = $_POST['AccordionID'];
}
然后在每个页面加载时,我会向服务器发送一个AJAX调用,该服务器将从用户会话中查询accordion部分:
$(document).ready(function () {
$.ajax({
type: 'GET',
url: 'urlToPhpScript.php',
data: 'function=getAccordion',
success: function(data) {
$('#AccordionID').accordion('activate', data);
}
});
});
这样,无论您如何从一个页面导航到另一个页面,都不必担心在您网站的每个页面上隐藏“currentAccordion”类型的隐藏字段。