【问题标题】:jQuery Mobile and ajax on load加载时的 jQuery Mobile 和 ajax
【发布时间】:2013-05-02 19:24:06
【问题描述】:

这个问题我已经有一段时间了,我在网上尝试了很多解决方案,但都没有奏效。

我需要的是在页面加载时将数据从 json 提供给 listview 并呈现它,但它只适用于索引,之后我需要重新加载每个页面以便我可以看到 listview。

这是我的 jquery 代码:

$(document).bind("mobileinit", function () {
                $.mobile.ajaxEnabled = false;
            });
            $(document).bind('pageinit',function() {
                DrawPageContent();
            });

             function DrawPageContent() {
             $.ajax({
                  dataType: "json",
                  url: "js/categorias.json",
                  success: function(msg){
                                console.log(msg.categorias[1].nombre);
                                var categos = '';
                                for(var i=0;i<msg.categorias.length;i++){
                                    categos += '<li><a href="refrescos.html?id='+ 0 +'"><img src="'
                                    + msg.categorias[i].logo + '"><h2>'+msg.categorias[i].nombre
                                    + '</h2><p>' + msg.categorias[i].desc + '</p></a></li> ';
                                }
                                $("#categorias").html(categos);
                                $("#categorias").listview("refresh");
                                //$("#page").trigger("pagecreate");
                            }
                });}

我也尝试过 $(document).ready() 和其他一些东西。

这是该部分的 HTML:

<div id="page" data-role="page">

    <div data-role="header">
        <h1>Categorias</h1>
        <a href="#popupOpciones" data-rel="popup" data-position-to="window" data-role="button" data-inline="true" data-icon="gear" data-theme="b" data-transition="pop">Opciones</a>
    </div>

    <div data-role="content">
        <ul id="categorias" data-role="listview" data-inset="true">
        </ul>

任何想法如何解决这个问题?

【问题讨论】:

  • 你在 pageinit 上加载数据,它只触发一次。
  • 我的计划是确保 ajax 在页面完成之前不会开始加载。
  • 你为什么不使用pagecreate,或pagebeforeshow,或pageshow?
  • 我会试一试并报告,谢谢提示。
  • 我已经尝试了所有 3 似乎都没有工作 =(

标签: json jquery listview jquery-mobile


【解决方案1】:

如果您每次都尝试附加到 id "categorias",这就是它只附加到第一页的原因。

在 JQuery mobile 中,加载的页面实际上并没有立即从 DOM 中删除。这意味着,如果您加载的页面不止一个,其中包含带有 id 类别的 and 元素,那么最终会出现多个带有标识它们的类别的 DOM 元素。在这种情况下,它只会附加到第一个,这可以解释为什么它不会显示在您的其他页面上,直到您刷新并且其他页面从 DOM 中删除。

这里一个好的解决方案是给每个页面一个唯一的标识符,然后使用从该页面中选择类别

$("#categorias", "#pageidentifier");

此选择器将在您指定的特定页面内搜索以查找您的分类元素。

【讨论】:

  • 因为取决于用户点击的是我加载的 json,所以我制作了各种 html,每个都有唯一的 listview id 和 page id,都遵循与上面相同的格式,但是一旦我转到下一个 html 我必须重新加载才能看到列表视图。
  • @Jadager 对其他页面中的其他列表视图使用相同的 ID?
  • @Jadager 类似地:您是从外部来源加载页面吗?还是您在程序中使用 html 字符串并附加到页面容器?
  • 他正在使用 Ajax/JSON 数据。但这不是问题,只要成功获取数据。顺便说一句,要针对基于父级的选择器,不要在它们之间添加逗号,即#foo #bar u target #bar inside #foo。
  • 不,每个列表视图都有自己的 id,我注意到 ajax 似乎没有被调用,而是在重新加载之后。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 2023-03-03
相关资源
最近更新 更多