Jquery mobile jquery mobile$mobile.changepage方法

Jquery mobile jquery mobile$mobile.changepage方法,jquery-mobile,Jquery Mobile,我有一个只有几页的html文件,当用户按下特定页面上的按钮时,我正在加载一个新的html文件,其中包含带有结果的页面。 页面加载工作正常,问题是我无法在新html中的新页面之间导航。 当我在浏览器上手动加载页面时,它工作得非常好 有人知道为什么吗? 我认为我需要在加载完成后对页面执行某种刷新操作,但我不习惯这样做,因为页面从远程服务器检索数据,我不知道刷新操作是否会再次尝试从远程服务器检索数据(这将重复用户等待得到答案的时间) 这是我使用的代码行: $.mobile.changePage(“me

我有一个只有几页的html文件,当用户按下特定页面上的按钮时,我正在加载一个新的html文件,其中包含带有结果的页面。 页面加载工作正常,问题是我无法在新html中的新页面之间导航。 当我在浏览器上手动加载页面时,它工作得非常好

有人知道为什么吗? 我认为我需要在加载完成后对页面执行某种刷新操作,但我不习惯这样做,因为页面从远程服务器检索数据,我不知道刷新操作是否会再次尝试从远程服务器检索数据(这将重复用户等待得到答案的时间)

这是我使用的代码行: $.mobile.changePage(“menu.php?q=“+query,{transition:“slide”})


谢谢你

。。。问题是我无法在新html中的新页面之间导航。

这一行让我相信您正在尝试为远程URL链接返回多页模板(这意味着您按下的链接不会链接到同一文档上的伪页面,而是链接到另一个文档)。jquerymobile默认情况下不允许这样做(我想你可以找到一个插件来实现这个功能)。jQuery Mobile仅从返回的外部文档中检索第一个
data role=“page
data role=“dialog”
元素

您可以使用单页模板,其中每个伪页都包含在自己的文档中,您可以通过普通URL(例如“/contact-us/index.php”)链接到每个伪页

您可以将所有必要的页面放在一个文档中,并使用基于哈希的链接(例如“#home”)在它们之间进行链接。当您这样做时,您仍然可以从数据库中检索数据,但您必须通过AJAX(很可能是绑定到页面事件)来创建代码

也许有一个插件可以实现这一点。如果没有,实际上这并不是一件很难的事情,你只需要自己抓取外部
data role=“page”
元素,而不是让jQuery Mobile来完成,将它们全部添加到DOM中,然后像平常一样转换到第一个

更新

如果要同时加载多个伪页面,请尝试以下操作:

//hijack link clicks on links with the `click-hijack` class
$(document).on('click', '.click-hijack', function () {

    //show loader
    $.mobile.loading('show');

    //create AJAX request for pseudo-page(s)
    $.ajax({
        url      : $(this).attr('href'),
        dataType : 'html',
        success  : function (response) {

            //hide loader
            $.mobile.loading('hide');

            //get the pseudo-page(s) from the AJAX response
            var $pages = $(response).find('[data-role="page"], [data-role="dialog"]');

            //append the pseudo-page(s) to the DOM
            //(this may need to change if you are using a framework like ASP.NET as they can add wrapper DOM elements)
            $("body").append($pages);

            //now that the pesueo-page(s) is/are in the DOM, we can transition to them normally
            $.mobile.changePage('#' + $pages.eq(0).attr('id'));
        },
        error    : function () {
            //don't forget to handle errors
        }
    });

    //stop the default behavior of the link, as well as propagation of the click event
    return false;
});

注意:此代码未经测试,请在使用代码时考虑到这一点。

默认情况下,在jQuery Mobile中,当您链接到外部页面时,jQuery Mobile将仅提取第一个
数据角色=“page”
,或者如果找不到,则将获取内容并将其包装在数据角色=“page”div中

您可以通过链接到不带ajax的页面来链接到外部多页面文档(将
data ajax=“false”
添加到您的链接)


如果您想通过ajax一次加载多个页面,您可以使用@Jasper Suggestive之类的工具手动加载,也可以使用专门为此设计的工具来加载。

谢谢,您说得对,我正在加载一个包含多个页面的新文件。我这样做是因为我不知道服务器将提前加载多少页面带回。这取决于用户的输入。我也只想从服务器检索一次数据。我没有找到使用AJAX加载多个页面的方法。你知道这样做的方法吗?@user1528238查看我答案的更新。如果你觉得我的答案有用,请随意投票或接受答案。嗨,jasper,我发现你的答案非常有用我是新来的,所以我唯一能接受这个答案的地方就是底部的“这篇文章对你有用吗?”?“,还有什么地方可以让我对你的答案投票吗?@user1528238在你问题的每个答案的左边,你应该看到一个空心的复选标记,你可以用它来接受答案。当你这样做的时候,你可能应该重新审视你以前的问题,在那里有人解决了你的问题并接受了他们的答案。看一看Hi可能也是个好主意,我使用了jasper AJAX示例,它在我个人计算机上的浏览器上运行得非常好,但是当我将它上传到phonegap应用程序时,AJAX调用似乎不起作用。在AJAX调用中,我调用了一个php文件,该文件使用代码行从服务器检索数据我不知道为什么,谢谢