2013-10-09 84 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