2012-07-23 33 views
2

我正在使用jQuery UI的手風琴作爲我正在建設的網站上的subnav。問題是,我一直無法找到維護頁面之間狀態的好方法。我想知道做這件事的最好方法是什麼。保持與PHP回發jQuery手風琴狀態

我想過把手風琴的索引存儲在數據庫中,但是對於這樣的問題來說似乎過於複雜。有沒有更好的辦法?很明顯,餅乾和會話,但這只是一個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

隱藏字段,也許? – mindandmedia 2012-07-23 13:03:40

+0

不要隱藏的字段必須在表單標籤內,並提交一個提交按鈕才能將數據發回? – jasonaburton 2012-07-23 13:07:50

+0

因爲我已經嘗試過了,但是我發現沒有其他方式來回發數據,除非我單擊提交按鈕,是否正確? – jasonaburton 2012-07-23 13:14:52

回答

1

這裏是我會做什麼:

在變化()處理程序手風琴,我將通過當前手風琴節的索引發送到服務器AJAX調用:

$("#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調用服務器將查詢從用戶會話手風琴節:

$(document).ready(function() { 
    $.ajax({ 
     type: 'GET', 
     url: 'urlToPhpScript.php', 
     data: 'function=getAccordion', 
     success: function(data) { 
      $('#AccordionID').accordion('activate', data); 
     } 
    }); 
}); 

這樣,它不會不管你是如何從瀏覽一頁到下一頁,並且您不需要擔心在網站的每個頁面上埋藏「currentAccordion」類型的隱藏字段。

+0

這聽起來很優雅。我會試一試。謝謝! – jasonaburton 2012-07-23 13:53:12

+0

謝謝,我正在編寫一個簡單的代碼示例以跟隨答案。 – 2012-07-23 13:54:34

+0

太棒了! – jasonaburton 2012-07-23 14:30:49