2013-10-09 130 views
0

我完全能夠加載json返回的數據(在我的html頁面中顯示爲「原樣」),但我似乎無法使原始json數據消失。我用下面的代碼:jQueryUI和標籤的json內容呈現

$("#tavole").tabs({ 
    cache : false, 
    event: "mouseover", 
    ajaxOptions : { 
     cache : false, 
     dataType : 'json' 
    }, 
    beforeLoad: function(event, ui) { 
     ui.jqXHR.fail(function() { 
      ui.panel.html("Couldn't load this tab. We'll try to fix this as soon as possible. " + "If this wouldn't be a demo."); 
     }); 
    }, 
    load: function (event, ui) { 
     renderList(JSON.parse($(ui.panel).text())); 
    } 
}); 

上面的代碼工作正常,renderList得到執行,但是原始JSON回報出現在標籤面板不管是什麼。我如何讓它消失,以便我只獲取處理的jquery對象呈現的顯示?

這是我的html:

<div id="tavole"> 
    <ul> 
     <li><a href="#tavole-1"><span class="ui-icon ui-icon-locked"></span>alfa</a></li> 
     <li><a href="#tavole-2"><span class="ui-icon ui-icon-person"></span>beta</a></li> 
     <li><a href="/api/products"><span class="ui-icon ui-icon-cart"></span>gamma</a></li> 

所以換句話說,我得到的/api/products返回在標籤的面板,並通過renderList功能的第二時間顯示一次。

我如何才能看到渲染的顯示?爲什麼我還看到/api/products的原始json返回?

回答

0

我如何才能看到只有渲染的顯示?爲什麼我還看到 原始json從/ api/products返回?

這是ajax初始化標籤後面的想法,小部件將只顯示ajax調用返回的內容。

你既可以在服務器呈現實際的HTML片段,或有renderList,而不是返回與DOM本身,這將讓你有機會進行互動交流的結果:

load: function (event, ui) { 
    var $panel = $(ui.panel) 
    var myHtml = renderList(JSON.parse($panel.text())); 
    $panel.html(myHtml); 
} 

您最好的選擇,雖然會是爲你的ajax調用寫一個自定義的轉換函數。現在,您正在使用「json」轉換器來獲取您的ajax結果,默認值爲JSON.parse。 查看jQuery.ajax(),文件converters的文檔。應該可以在標籤'beforeLoad事件處理程序(請參閱tabs -> event: beforeLoad)中將自定義轉換器函數連接到您的ajax調用,這將a)執行JSON分析並b)調用您的renderList函數。這會使tabsload事件過時。

後一個版本當然是最複雜的一個,但是(雖然我自己並沒有這樣做),我也發現它是最乾淨的方法。

+0

嗨,tks抽空回答:) – LordVee

+0

嗨,tks抽空回答:) 這有點出乎意料。我真的認爲,它應該是很容易做到這一點... 現在,通過使用: 載:函數(事件,UI){ 變量$面板= $(ui.panel) VAR MYHTML = renderList( JSON.parse($ panel.text())); $ panel.html(myHtml); } 我仍然得到原始json和我的json對象格式良好...不知道如何擺脫原始json。應該有辦法。 我的理解是$(ui.panel)實際上並不是處理原始數據,而是僅僅是ajax對象。這基本上是兩個不同的實體。 – LordVee

+0

對不起,我最後的評論是一團糟...仍然不太熟悉格式。 也許我應該嘗試自定義轉換器,但是我擔心我會像以前一樣再次結束:有兩個實體1)原始返回和2)jquery對象 – LordVee