【问题标题】:jQuery mobile ajax not loadingjQuery 移动 ajax 未加载
【发布时间】:2011-08-30 14:55:08
【问题描述】:

我必须在这里错过一件非常简单的事情,因为它看起来很明显......而且我不敢相信我在网上找不到任何东西!

我正在尝试使用 jQuery 移动库来制作我的网站的移动视图。

我的页面中有三个页面(数据角色)。两个带有静态内容,第二个带有我希望使用 ajax 加载的内容。主页有其他两个页面的链接:

<div data-role="page" id="home">
    <div data-role="header" id="header">
        <h1>the header</h1>
    </div>
    <div data-role="content">
        <a href="http://absolutepathtomyserver/homepage#highlights" data-role="button">highlights</a>
        <a href="http://absolutepathtomyserver/updatePlaylistTemplate#playlist" data-role="button" rel="external">playlist</a>
    </div>
</div>

<div data-role="page" id="highlights">
    <div data-role="content">
        <p class="center">My static content</p>
    </div>
</div>

<div data-role="page" id="playlist">
    <div data-role="content"><!-- TO BE FILLED FROM AJAX! --></div>
</div>

根据我对阅读的许多教程的理解,默认情况下,所有 a href 链接都会执行 ajax 调用,除非另有说明,但它不起作用。当我单击突出显示链接时,该页面就像预期的那样滑动,而没有加载任何其他页面,因为它是同一页面。这里一切都很好。但是当我单击播放列表页面时,会执行幻灯片动画,但不会进行 ajax 调用,因此永远不会填充播放列表的内容。请注意,我监控网络调用,但单击链接时没有进行任何调用。

我错过了什么?

这是我的绝对使命吗?我将标签基 URL 用于静态内容,因此链接在我的所有应用程序中都必须是绝对的。

我需要使用 .bind 方法吗?

我需要手动进行 ajax 调用吗?我可以做到,但是从我的阅读来看,它似乎是移动扩展中的 href 链接的原生...

【问题讨论】:

    标签: jquery-mobile


    【解决方案1】:

    jQuery Mobile ajax-link 处理适用于文档中尚未指定的伪页面。如果您想通过 home 伪页面上的链接进行 ajax 加载页面,则从文档中省略 playlist 伪页面。 jQuery Mobile 会跳转到链接中指定的 url,抓取data-role="page" 元素内的所有内容,自动添加到 dom 中,并跳转到新添加的页面。

    另一种方法是在playlist页面显示如下时通过ajax调用加载数据:

    $('#playlist').bind('pageshow', function () {
        $.get('url_to/get.php', function (data) {
            $('#playlist').find('[data-role="content"]').html(data);
        });
    });
    

    上述示例每次显示时都会重新加载playlist 伪页面内的data-role="content" 元素中的html。您也可以使用pagecreate 或其他jQuery Mobile events 之一。

    【讨论】:

    • 首先感谢您的回答。您的答案探索了两种选择
    • 首先感谢您的回答。您的答案探索了两个选项。选项 1 是删除我的 html 中的 div id 播放列表,以便库在从我的服务器收集数据时动态创建它。这没有奏效。它确实在调用后端到错误的 url,而不是调用 href 中指定的 url,而是调用 index#playlist,因此页面在新创建的 div id 播放列表中重新加载。糟糕...选项 2 最终使用了一些 tweeking。看我的回答
    【解决方案2】:

    选项 2 稍加调整。我不知道为什么,但实际上,代码中的回调函数似乎太快了,因为没有填充内容,尽管内容是从后端获取的。我可以在我的网络检查器中看到呼叫。第二个选择器中也缺少“ ' ”。

    这是工作代码:

    $('#playlist').bind('pageshow', function () {
        $.ajax({
            url: 'updateplaylist.html',
            success:function(data, textStatus, jqXHR){$('#playlist').find('[data-role="content"]').html(data);}
        }); 
    });
    

    我仍然想知道为什么选项 1 没有采用正确的 url。我还担心手动执行我的 ajax 调用会跳过 jquery 移动框架的默认微调器。本地太快了,反正我也看不到。

    【讨论】:

    • 这里是 jQuery 的 get 方法的文档链接:api.jquery.com/jQuery.get。它是您在上面使用的相同功能的简写。另外关于加载微调器,请查看 jQuery Mobile 文档的方法和实用程序页面以了解如何显示/隐藏加载微调器:jquerymobile.com/demos/1.0b2/docs/api/methods.html
    • 是的,简单的 get 方法对某些人很有用。但就我而言,我需要完整版本,因为我想处理微调器的外观,如下所示: beforeSend:function(){$.mobile.showPageLoadingMsg();}, complete:function(){$.mobile.hidePageLoadingMsg( );},
    • 在调用 $.get 方法之前,调用微调器进行查看,然后在您的回调函数中从视图中删除微调器... $.mobile.showPageLoadingMsg(); $.get('url', function () {$.mobile.hidePageLoadingMsg();});
    猜你喜欢
    • 2011-06-03
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多