必须有一个更简单的方法

时间:2013-08-05 16:20:22

标签: ajax json jquery-mobile optimization

我正在尝试创建一个JQM应用程序,并且通过从数据库中获取大量数据来实现这一目的。当我点击ajax / json生成的日历列表中的链接时,我应该能够通过调用服务器获取该事件的信息并获取数据。就像现在一样,我是这样做的两个步骤。

我的ajax生成的事件列表:

$.each(groupcalendar, function (i, val) {
    output += '<li><a href="#" data-id="' + val.mid + '" id="gotoMatch"><h2>' + val.matchformname + '</h2><p><strong>' + val.matchday + '</strong></p><p>' + val.coursename + '</p><p class="ui-li-aside"><strong>' + val.matchtime + '</strong></p></a></li>';
});

当我点击其中一个链接时,我想转到一个名为prematchdata.html的页面,并获取该特定事件的数据。我这样做是首先调用click并从data-id获取eventid,如下所示:

$(document).on('click', '#gotoMatch', function () {

    var matchid = $(this).attr("data-id");

    $.get("http://mypage.com/json/getmatchinfo.php?matchid="+matchid, function(data) {

        localStorage["matchinfo"] = JSON.stringify(data);

        $.mobile.changePage( "prematchdata.html", { transition: "slide", changeHash: true} );

    }, "json");

});

我将返回的数据保存为localStorage,然后在我的pageinit中使用这些数据,如下所示:

$(document).on("pageinit", "#prematchdata", function() {

    var matchinfo = {};
    matchinfo = JSON.parse(localStorage["matchinfo"])

    var content = '<h2>'+matchinfo["matchname"]+'</h2>';

    $('.infoholder').html(content);

});

它有效,虽然对我来说似乎最后两个步骤应该在一个中完成,但我不知道该怎么做?获取数据似乎有点不对,在本地保存然后再使用它?如果没有 $(document).on('click','#gotoMatch',function(){}),可以做到这一点?

希望得到一些帮助并提前感谢: - )

1 个答案:

答案 0 :(得分:1)

您可以尝试使用查询字符串发送它。当您使用changePage时,请更改您的代码:

$(document).on('click', '#gotoMatch', function () {

    var matchid = $(this).attr("data-id");
    $.get("http://mypage.com/json/getmatchinfo.php?matchid=" + matchid, function (data) {
        paramData = data[0];
        $.mobile.changePage("prematchdata.html", {
            transition: "slide",
            changeHash: true,
            data: paramData //added this extra parameter which will pass data as a query string
        });
    }, "json");

});

当你收回它时,

$(document).on("pageinit", "#prematchdata", function() {

    var url = $.url(document.location);
    var name= url.param("matchname");

    var content = '<h2>'+ name +'</h2>';

    $('.infoholder').html(content);

});

另一种简单的方法是使用单页模板而不是多页模板。然后,您可以使用全局变量来获取和设置数据。

那就是说,你现在所做的比这个查询字符串方法更安全。通过使用此功能,任何人都可以通过URL查看您发送的内容。因此,我建议您继续使用localStorage For more info on this, look into this question.