【问题标题】:for loop randomly crashing on certain iterationsfor 循环在某些迭代中随机崩溃
【发布时间】:2013-07-19 18:45:08
【问题描述】:

一定有人能发现我的错误!我正在解析 xml 提要并通过循环运行以获取页面上的某些项目:

www.highlandradio.com/feed/

我在设置变量 mp3Test 的行上遇到错误。我要做的就是将其设置为等于附件标签的 url 属性(如果存在)。这就是为什么我包括测试以检查每个项目是否有附件标签,如果有,我将其设置为等于 url 标签,但如果不是,我将其设置为等于'null.mp3 ' 目前。在循环中运行时,我得到了一定数量的正确数字,然后在循环的某些迭代中,我崩溃了。我正在使用钛,因此没有收到任何正确的错误消息。它只是突出显示了我设置 mp3Test 并说调试当前指令指针的行。我要疯了。请帮忙。

var url="http://www.highlandradio.com/feed/"; 

var xhr = Titanium.Network.createHTTPClient();

xhr.onload = function() {
    // Data is returned from the blog, start parsing
    var doc = this.responseXML.documentElement;    

    // begin looping through blog posts
    var items = doc.getElementsByTagName("item");

    var enclosure = doc.getElementsByTagName("enclosure");
    console.log("NEWEST Enclosure Length -----------"+enclosure.length);

    for (var i = 0; i < items.length; i++) {        

        var itemsEnclosureLength=items.item(i).getElementsByTagName("enclosure").length;
        var itemsEnclosureExists=items.item(i).getElementsByTagName("enclosure");
        console.log("EXISTs ----------------------------------"+ itemsEnclosureExists);
        console.log("Newest ENCLOSURE LENGTH ---------------------- [ "+i+ " ]" + itemsEnclosureLength);

        var str=items.item(i).getElementsByTagName("content:encoded").item(0).text;
        console.log("STRING TEST "+ str);

        var patt1=/([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))/i;

        var urlMatch = str.match(patt1);
        console.log("MATCHES TESTER -----------------------------------" + typeof urlMatch);

        data.push({

            title: items.item(i).getElementsByTagName("title").item(0).text,            
            leftImage: str.match(patt1) !== null ? str.match(patt1)[0] : 'image_news.png',
            dataToPass: items.item(i).getElementsByTagName("description").item(0).text,
            mp3Test: itemsEnclosureLength > 0 ? items.item(i).getElementsByTagName("enclosure").item(i).getAttribute("url"):'NULL.MP3'
        });
        console.log("Check this --------------------------"+ mp3Test);



    }

BUMP2

【问题讨论】:

  • items.item(i) 应该是items[i],不是吗?
  • @Barmar 没有。不是钛。 items.item(i) 适用于所有其他标签。如果我用 mp3Test 注释掉该行,它将运行。我缺少一些东西:(
  • @Barmar 可以,但从技术上讲,.item() 是一个真实有效的方法:developer.mozilla.org/en-US/docs/Web/API/HTMLCollection#Methods。不过我更喜欢[i]
  • @Ian 我之前尝试过 [i],它导致应用程序崩溃,即使是在基本迭代中,每次只是循环并将标题添加到数组中。
  • 嘿,你能显示你的响应数据吗?那么,也许我可以帮助你。

标签: javascript xml arrays for-loop titanium


【解决方案1】:

问题是我使用了两个具有相同值的计数器!愚蠢的错误,但是......这是解决方案:

var itemsEnclosureLength=items.item(i).getElementsByTagName("enclosure").length;
var itemsEnclosureExists=items.item(i).getElementsByTagName("enclosure");

if (itemsEnclosureExists){ 

     for (n=0; n<itemsEnclosureLength; n++){
         mp3=items.item(i).getElementsByTagName("enclosure").item(n).getAttribute("url");
     }
}
else{
     mp3= 'NULL.mp3';
}

【讨论】:

    猜你喜欢
    • 2020-08-05
    • 2012-11-07
    • 1970-01-01
    • 2021-10-21
    • 2021-12-27
    • 2021-10-14
    • 2021-05-03
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多