2012-06-04 43 views
3

我有三個3(jquery的)選項卡:如何處理每個jquery選項卡的不同json數據?

  • 概述
  • 定價
  • 目的地信息

每個選項卡都具有完全不同的數據。我可以在href中指定一個URL來進行AJAX調用。但是,如何處理爲每個選項卡收到的數據(以便我可以根據上下文渲染它們)?

我應該使用load事件來處理數據嗎?如果是這樣,我怎樣才能得到在加載事件返回的json數據的句柄?

+0

我用自帶的WebKit瀏覽器的檢查一些(主要是與Chrome瀏覽器,您必須啓用它專門在Safari)來調試我的JavaScript,看看究竟什麼是一個變量。實現負載處理程序,在函數中放置一個斷點,然後使用檢查器告訴我變量中存在什麼(它會顯示它的所有參數,event.somethings等)。 –

+0

@FireLizzard是的,這就是我自己發展的方式。我是後端開發人員,因此很難弄清楚前端細節,但檢查員爲我節省了一天的時間。至於加載函數,我不知道如何獲得給定選項卡返回的json數據的句柄。我知道的唯一方法是在'success'事件處理程序中處理返回的json數據。但是我沒有那裏的選定標籤的引用。 – brainydexter

回答

2

我有jQuery UI的經驗不多,但我知道你可以從一個AJAX請求的JSON(here)獲取數據:

$.ajax({ 
    url: "http://example.com/page.html", 
    dataType: "json", 
}).done(function (data) { 
    // Do some stuff with the data 
}); 

或者你可以使用jQuery.getJSON。 然後總是有jQuery.parseJSON

編輯:至於我能弄清楚,這是最好的,你會得到:

$(window).load(function(){ 
    $(function() { 
     $("#tabs").tabs({ 
      ajaxOptions: { 
       error: function(xhr, status, index, anchor) { 
        $(anchor.hash).html(
         "Couldn't load this tab. We'll try to fix this as soon as possible. " + 
         "If this wouldn't be a demo."); 
       }, 
       success: function(jsonObject, status) { 
         // Code 
       }, 
       dataType: "json" 
      } 
     }); 
    }); 
}); 

這樣,JSON需要包括你一起工作的標籤。這會導致一個相當不雅的解決方案,因爲你將不得不打開從json返回的tab值。看起來好像Tab API並不適合任何人自己處理顯示過程。我看到其他三個選項:自己重做Tab API;破解API來做你的事情;或不喜歡get_tab_contents.php?tabid=someid&json=somepath

+0

當然可以使用AJAX/JSON加載數據。我關心的是處理返回的數據。如果我指定的ajaxOptions成功的功能,那麼我怎麼知道是誰發送的請求,並且標籤更新 – brainydexter

+0

你能,或者這將是不切實際的,實現爲每個標籤不同的功能?此外,據我所知,'ajax.done(FUNC)'有異曲同工之妙如''ajaxOptions' success'。 –

+0

@Firelizzard由於jQuery UI的選項卡的功能,它是不可能給每一個它自己的成功方法選項卡。但是,(@brainydexter),請嘗試控制檯。記錄(this)在成功處理程序中,它可能會有一些信息可以使用,例如請求數據的url。 –

1

也許我在閱讀這個錯誤,但是......你可以在你的AJAX響應中使用帶有某種標記的開關。

/* 
    Your AJAX response could be something like: 
    data.type = destination, overview, pricing etc 
    data.content = The actual content you are expecting 
*/ 
var data=/* Your ajax call */ 
switch(data.type) 
{ 
case 'destination': 
     /* Handle the rest of the data object*/ 
     $('div').html(data.content); 
     break; 
case 'overview': 
     break; 
case 'pricing': 
     break; 
} 
+0

我也在探索數據類型被返回的思路,但我相信必須有一個更清晰的方式來處理這個問題。另外,你認爲我可以以任何方式利用'load'事件嗎? – brainydexter

相關問題