Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQueryUI和tabs';json内容呈现_Jquery_Ajax_Json_Jquery Ui - Fatal编程技术网

jQueryUI和tabs';json内容呈现

jQueryUI和tabs';json内容呈现,jquery,ajax,json,jquery-ui,Jquery,Ajax,Json,Jquery Ui,我完全能够加载json返回的数据(在html页面中显示为“原样”),但是我似乎无法使原始json数据消失。我使用了以下代码: $( "#tavole" ).tabs({ cache : false, event: "mouseover", ajaxOptions : { cache : false, dataType : 'json' }, beforeLoad: function( event, ui ) {

我完全能够加载json返回的数据(在html页面中显示为“原样”),但是我似乎无法使原始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返回

如何仅查看渲染显示?为什么我也看到了 从/api/products返回的原始json

这就是ajax初始化选项卡背后的想法,小部件将简单地显示ajax调用返回的内容

您可以让服务器呈现一个实际的HTML片段,或者让renderList返回其结果,而不是与DOM本身交互,这样您就有机会:

load: function (event, ui ) {
    var $panel = $(ui.panel)
    var myHtml = renderList(JSON.parse($panel.text()));
    $panel.html(myHtml);
}
不过,最好是为ajax调用编写一个自定义转换器函数。现在,您正在为ajax结果使用“json”转换器,它默认为
json.parse
。 请参阅转换器的文档,部分
转换器
。在加载前事件处理程序(请参阅)的选项卡中,应该可以将自定义转换器函数连接到ajax调用,这将a)执行JSON解析,b)调用renderList函数。这将使
选项卡的
加载
事件过时


后一个版本当然是最复杂的,但(虽然我自己没有做过)我也发现它是最干净的方法。

hi,tks花时间回答:)hi,tks花时间回答:)这有点出乎意料。我真的认为这样做应该容易得多。。。现在,通过使用:load:function(event,ui){var$panel=$(ui.panel)var myHtml=renderList(JSON.parse($panel.text());$panel.html(myHtml);}我仍然可以很好地格式化原始JSON和JSON对象。。。不知道如何摆脱原始json。应该有办法。我的理解是$(ui.panel)实际上并不是在处理原始数据,而是在处理ajax对象。这基本上是两个不同的实体。对不起,我上次的评论是一团糟。。。还是不太熟悉格式。也许我应该尝试自定义转换器,但是我担心我会像以前一样结束:有两个实体1)原始返回和2)jquery对象
$(ui.panel)
将引用作为选项卡容器的DOM实体。这个想法是为了清除默认情况下放在那里的任何东西。如果在插入响应之前发生
load
,我的建议将不起作用。我必须承认,我还没有证实这一点,而且文档在这个特定问题上有点不清楚。UweB,实际上是我的错,我没有正确地实现它。现在我修好了,它按照你的建议工作。