2012-03-14 19 views
0

我已经获得了使用jQuery(.ajax)和JSON动态创建的< li>格式的新闻文章列表。当我收到JSON数据时,我构建了列表项并将它们附加到父项< ul>。动态jQuery/JSON菜单在注销之前变为静态

我的问题是,如果用户使用后退按钮,然后重新进入新闻领域,列表获取并再次追加,给我重复的列表项。 jQuery中有没有办法将.ajax请求限制为一个负载?或者我应该将所有新闻< li>添加到会话/本地存储中?

代码:

$('#schoolnews').live("click", function(){ 
$.mobile.showPageLoadingMsg(); 
var schoolID = sessionStorage.getItem('schoolID'); 
var entityType = sessionStorage.getItem('entityType'); 
$.ajax({ 
    url: 'http://www.sycamoreeducation.com/mobile/JSON/getnewslist.php', 
    data: {schoolID: 'schoolID', entityType: 'entityType'}, 
    dataType: 'jsonp', 
    jsonp: 'jsoncallback', 
    timeout: 5000, 
    success: function(data){ 
    //alert("Success in retreiving JSON News Data!"); 
    $.mobile.changePage('#news'); 
    $.each(data, function(index, value){ 
       var newslistitems = '<li class="newsitem" data-theme="c"><h3>' +value.Subject+ '</h3><p>Posted on: ' +value.Day+ '</p></li>'; 
      $('ul#newslist').append(newslistitems); 
     }); 
    $('ul#newslist').listview('refresh'); 
    $.mobile.hidePageLoadingMsg(); 
    }, 
    error: function(){ 
    alert('Error Message'); 
    } 
}); //end login ajax call 
}); //end school news click listener 

还是很当谈到jQuery的,所以如果你能发现我在哪里可以改进的任何区域,请不要犹豫,让我知道一个新手。谢谢!

+1

尝试在数据加载之前在父UL上运行empty()。通过这种方式,无论列表中是否有内容,它都将清除全部内容,然后附加任何数据。值得一试 – chris 2012-03-14 20:22:21

+1

谢谢,@Chris!这就是我现在一直在做的事情(一年多后),它一直像魅力一样工作。 – TheBrockEllis 2013-03-26 13:57:29

回答

0

另外,您可以使用HTML()

内$。每个变化

var newslistitems .... 

newslistitems += 

然后循环之前和循环加载后定义newslistiems:

$('ul#newslist').html(newslistitems); 

通过这种方式,每个项目都被添加到newslistitems变量中,并在循环结束时被添加到ul#newslist中,html()将清除ul#newslist中的任何以前的内容,并将其替换为newslistitems变量的内容。