jquerymobile和AJAX

时间:2011-11-10 10:18:55

标签: jquery-mobile

在我看来,我并没有完全理解jquerymobile背后的概念,因为我不知道如何解决这个问题。

我想要做的是通过AJAX加载一些HTML内容,根据location.hash,将其放入新页面并加载此页面。

但是如果我使用pagebeforechange事件自己创建一个页面,jquerymobile就会忽略它,创建自己的div并且不会显示我的内容。

我该怎么做?

编辑: 这就是我目前正在做的事情,但它不起作用。

$(function() {

    getPageContent(top.location.href, false);

    $(document).bind( "pagebeforechange", function( e, data ) {

            getPageContent(data.toPage, true);
    });


});



function getPageContent(pageUrl, changedPage) {

    var re = /.*\/#(.*)/;
    var result;


    result = re.exec(pageUrl);


    window.page = result[1].substr(0,3);
    window.id = result[1].substr(3);



    window.ajaxUrl = "request.php?page="+window.page+"&id="+window.id;

    $.ajax({

        url: window.ajaxUrl,

        success: function(data) {

            if(data.error) {
                alert(data.error);
            }
            else if(data.data) {
                if(changedPage) {
                    changePage(data.data));
                }
                else {
                    $('#content[role="main"]').html(atob(data.data));
                    setupPage();
                }

            }
            else {
                alert("UNKNOWN ERROR: "+data);
            }       
        }

    });

}

function changePage(html) {


    var div = "<div></div>";

    var newPage = $(div).attr("data-role", "page").attr("data-url", window.page+window.id);

    var header = $(div).attr("data-role", "header");
    var content = $(div).attr("data-role", "content");
    var footer = $(div).attr("data-role", "footer");

    $("body").append(newPage);
    newPage.append(header, content, footer);

    content.html(html);

    newPage.page();
}

3 个答案:

答案 0 :(得分:1)

完整编辑整个答案:

首先。将您的正文ID设为id=body。然后,当您想要加载新页面并更改为它时,请使用如下的ajax调用:

$.get(window.ajaxUrl, function(data){
    $('#body').append("<div id='newPage' data-role='page'></div>"); //Creates a new page.
    $('#newPage').html(data); //Loads the html content into the new page.
    $.mobile.changePage('#newPage'); //Navigates to the new page.
}

这会将方法GET的ajax调用发送到window.ajaxUrl中找到的网址。如果调用成功,它将创建一个名为“newPage”的新页面,并使用从ajax调用接收的数据填充它。然后重定向到新创建的页面。

jsFiddle显示了其工作原理。但是,它不使用任何ajax调用。

答案 1 :(得分:0)

您必须使用jQueryMobile刷新页面:

 $("#your-page").trigger("create");

- 编辑

<script> 
     $("#thepage").live("pageshow", function(){
        $("#thepage).trigger("create");
       });
</script>

在'pageshow'事件

之前更改#thepage的内容

答案 2 :(得分:0)

它会自动为您执行此操作 - 只需定期链接到页面,jquery mobile将关闭加载微调器,通过ajax将其加载到后台,然后转换到新页面。

确保所有网页都使用唯一ID和data-role ='page'来决定。查看此处的入门指南: http://jquerymobile.com/demos/1.1.0/docs/about/getting-started.html