我正在尝试创建一个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(){}),可以做到这一点?
希望得到一些帮助并提前感谢: - )
答案 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.