Javascript 难以在由多个xml文件提供服务的列表视图中加载多个图像
我正在为Android开发一个html应用程序,并尝试在列表视图中加载图像。特定于列表项的数据由多个xml文件提供。我正在使用ajax加载xml文件并填充列表项。我在这里面临的问题是有164个列表项。因此,需要加载164个图像和10个xml文件。我的加载器函数在两次迭代后耗尽。它确实读取xml文件,但无法在两次迭代后动态创建列表项并用图像填充它们。我相信这是由于堆栈的限制。我想不出其他的解决办法。如果有人能提出另一种解决方案,我们将不胜感激。下面是我的加载器函数。这是一个递归函数:Javascript 难以在由多个xml文件提供服务的列表视图中加载多个图像,javascript,html,jquery,jquery-mobile,Javascript,Html,Jquery,Jquery Mobile,我正在为Android开发一个html应用程序,并尝试在列表视图中加载图像。特定于列表项的数据由多个xml文件提供。我正在使用ajax加载xml文件并填充列表项。我在这里面临的问题是有164个列表项。因此,需要加载164个图像和10个xml文件。我的加载器函数在两次迭代后耗尽。它确实读取xml文件,但无法在两次迭代后动态创建列表项并用图像填充它们。我相信这是由于堆栈的限制。我想不出其他的解决办法。如果有人能提出另一种解决方案,我们将不胜感激。下面是我的加载器函数。这是一个递归函数: functi
function loadChannels() {
$.ajax({
type: "GET",
url: curURL,
dataType: "xml",
error: function(){ console.log('Error Loading Channel XML'); },
success: function(nXml) {
var noOfItems = parseInt($($(nXml).find('total_items')[0]).text(), 10);
var startIdx = parseInt($($(nXml).find('item_startidx')[0]).text(), 10);
var allItems = $(nXml).find('item');
$(allItems).each(function() {
var obj = $("<li><span id='cont-thumb'></span><span id='cont-name'></span></li>");
$("#content-scroller ul").append($(obj));
var imgURL = $($(this).find('item_image')[0]).text();
var contThumb = $(obj).children()[0];
$(contThumb).css("background-image", 'url('+imgURL+')');
var name = $($(this).find('name')[0]).text();
var contName = $(obj).children()[1];
$(contName).text(name).css('text-align', 'center');
var url = $($(this).find('link')[0]).text();
$(obj).data('item_link', url);
$(obj).bind('click', onJPContSelected);
});
if(startIdx+allItems.length < noOfItems){
var newIdx = new Number(startIdx+allItems.length);
var tokens = curURL.split("/");
tokens[tokens.length-2] = newIdx.toString(10);
curURL = "http:/";
for(var i=2; i<tokens.length; i++)
curURL = curURL + "/" + tokens[i];
loadChannels();
}
}
});
}
函数加载通道(){
$.ajax({
键入:“获取”,
url:curURL,
数据类型:“xml”,
错误:函数(){console.log('error Loading Channel XML');},
成功:函数(nXml){
var noOfItems=parseInt($($(nXml).find('total_items')[0]).text(),10);
var startIdx=parseInt($($(nXml).find('item_startIdx')[0]).text(),10);
var allItems=$(nXml).find('item');
$(所有项)。每个(函数(){
var obj=$(“”);
$(“#内容滚动器ul”).append($(obj));
var imgURL=$($(this).find('item_image')[0]).text();
var contThumb=$(obj.children()[0];
css(“背景图像”,“url('+imgURL+'));
var name=$($(this).find('name')[0]).text();
var contName=$(obj.children()[1];
$(contName).text(name).css('text-align','center');
var url=$($(this.find('link')[0]).text();
$(obj).data('item_link',url);
$(obj).bind('click',onJPContSelected);
});
如果(startIdx+allItems.length 对于(var i=2;i尝试使用外部循环删除递归-类似于:
function loadChannels(){
var stopFlag = false;
// request the pages one after another till done
while(!stopFlag)
{
$.ajax({
type: "GET",
url: curURL,
dataType: "xml",
error: function(){
console.log('Error Loading Channel XML');
errorFlaf = true;
},
success: function(nXml) {
var noOfItems = parseInt($($(nXml).find('total_items')[0]).text(), 10);
var startIdx = parseInt($($(nXml).find('item_startidx')[0]).text(), 10);
var allItems = $(nXml).find('item');
$(allItems).each(function() {
var obj = $("<li><span id='cont-thumb'></span><span id='cont-name'></span></li>");
$("#content-scroller ul").append($(obj));
var imgURL = $($(this).find('item_image')[0]).text();
var contThumb = $(obj).children()[0];
$(contThumb).css("background-image", 'url('+imgURL+')');
var name = $($(this).find('name')[0]).text();
var contName = $(obj).children()[1];
$(contName).text(name).css('text-align', 'center');
var url = $($(this).find('link')[0]).text();
$(obj).data('item_link', url);
$(obj).bind('click', onJPContSelected);
});
if(startIdx+allItems.length < noOfItems){
var newIdx = new Number(startIdx+allItems.length);
var tokens = curURL.split("/");
tokens[tokens.length-2] = newIdx.toString(10);
curURL = "http:/";
for(var i=2; i<tokens.length; i++)
curURL = curURL + "/" + tokens[i];
// lets disable the recursion
// loadChannels();
}
else {
stopFlag = true;
}
}
});
}
}
函数加载通道(){
var stopfag=false;
//要求一页接一页直到完成
而(!stopFlag)
{
$.ajax({
键入:“获取”,
url:curURL,
数据类型:“xml”,
错误:函数(){
log(“加载通道XML时出错”);
errorFlaf=true;
},
成功:函数(nXml){
var noOfItems=parseInt($($(nXml).find('total_items')[0]).text(),10);
var startIdx=parseInt($($(nXml).find('item_startIdx')[0]).text(),10);
var allItems=$(nXml).find('item');
$(所有项)。每个(函数(){
var obj=$(“”);
$(“#内容滚动器ul”).append($(obj));
var imgURL=$($(this).find('item_image')[0]).text();
var contThumb=$(obj.children()[0];
css(“背景图像”,“url('+imgURL+'));
var name=$($(this).find('name')[0]).text();
var contName=$(obj.children()[1];
$(contName).text(name).css('text-align','center');
var url=$($(this.find('link')[0]).text();
$(obj).data('item_link',url);
$(obj).bind('click',onJPContSelected);
});
如果(startIdx+allItems.length 对于(var i=2;iI甚至尝试使用计时器来控制此行为,但没有效果。它只加载164个图像中的20个。我真的不明白发生了什么。任何快速帮助都将不胜感激。嗨,Yuvi,感谢您的快速响应。添加外部循环会导致循环无限次运行,因为AJAX调用是异步的。我尝试了使用计时器控制递归,但这也不起作用。我认为这与堆有关,因为我得到了以下控制台消息:dalvikvm heap(19807):Grow heap(frag case)3850256字节分配到11.130MB似乎这个问题是针对蜂巢的。冰淇淋三明治和姜饼正确呈现HTML内容。顺便说一句:ajax可以设置为非异步-这就是我对页面的意思,一个接一个感谢Yuvi的帮助。正如我提到的,这个问题是针对蜂巢的。我正在加载web内容这就是安卓蜂巢造成问题的原因。