使用PHP在回发时保持jQuery的一致状态

使用PHP在回发时保持jQuery的一致状态,php,jquery-ui,accordion,state,Php,Jquery Ui,Accordion,State,我正在使用jQueryUI的手风琴作为我正在构建的站点上的子AV。问题是我还没有找到一个好方法来维护页面之间的状态。我想知道最好的方法是什么 我曾想过将手风琴的索引存储在数据库中,但对于这样的问题来说,这似乎过于复杂了。有更好的办法吗?显然是cookies和session,但这对于一个subnav来说同样复杂……有什么想法吗 编辑:这是我的代码 $.post( accordion_ajax.ajaxurl, { type : 'GET', ac

我正在使用jQueryUI的手风琴作为我正在构建的站点上的子AV。问题是我还没有找到一个好方法来维护页面之间的状态。我想知道最好的方法是什么

我曾想过将手风琴的索引存储在数据库中,但对于这样的问题来说,这似乎过于复杂了。有更好的办法吗?显然是cookies和session,但这对于一个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')

            }
        );
    }
});

下面是我要做的:

在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'];  
}
$(document).ready(function () {
    $.ajax({
        type: 'GET',
        url: 'urlToPhpScript.php',
        data: 'function=getAccordion',
        success: function(data) {
            $('#AccordionID').accordion('activate', data);
        }
    });
});

这样一来,无论你如何从一个页面导航到下一个页面,你也不必担心在网站的每个页面上都隐藏一个“currentAccordion”类型的隐藏字段。

隐藏字段不一定要在表单标签中,并通过提交按钮提交,才能将数据发回吗?因为我已经尝试过了,但是我没有找到其他方法来回发数据,除非我点击一个提交按钮,对吗?你可以使用ajax,不需要提交。我会使用ajax吗?你能给我举个例子说明怎么做吗?这听起来很优雅。我试试看。谢谢谢谢,我准备了一个简单的代码示例来回答这个问题。我已经编辑了上面的问题,你有什么想法吗?(里面有一些wordpress代码..只是让你知道你不会感到困惑)只是让你知道我最终将它存储在一个cookie中,我通过ajax获得了值。好吧,只是ajax调用中的手风琴设置不起作用,我不知道为什么。还有一些其他的。我注释了所有的手风琴代码,除了激活选项,现在手风琴根本不工作。在ajax调用执行时初始化accordion是否太晚了?