访问数组的元素导致我的应用程序崩溃

时间:2013-07-15 13:36:57

标签: javascript xml image syntax null

好的,真基本的排队。我只是没有得到这个。我正在解析一个xml feed。我在标签内搜索图像的正则表达式。在那一刻,当我打印

str.match(patt1) , 我得到了:

http://www.highlandradio.com/wp-content/uploads/2013/03/jimmy.jpg,http://www.highlandradio.com/wp-content/uploads/2013/03/jimmy.jpg,jpg

在控制台中。我只需要第一个元素,即

http://www.highlandradio.com/wp-content/uploads/2013/03/jimmy.jpg

为了做到这一点,我尝试了str.match(patt1)[0],但这一行导致我的应用程序崩溃。我将此varibale设置为等于表行的leftImage属性。我也在测试它是否为“继续”循环,因为我认为可能是问题。

我也尝试过str.match(patt1 [0]),但这也没有给我所需的输出。我做错了什么?

编辑:APP JS下面:

    var win1 = Titanium.UI.createWindow({  
    title:'Tab 1',
    backgroundColor:'#fff',
    //tabBarHidden: true

});
var tab = Titanium.UI.createTab({  
    icon:'KS_nav_views.png',
    title:'Tab 1',
    window:win1
});

var data = [];

var table = Ti.UI.createTableView({
    //data:data
});

var url="http://www.highlandradio.com/feed/"; 
//rss feed url
//var url="http://apod.nasa.gov/apod.rss"; //  rss feed url
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");
    console.log(items);
    for (var i=0;i<items.length;i++) {

        var str=items.item(i).getElementsByTagName("content:encoded").item(0).text;
        console.log("FIRST STRING TEST "+ str);
        //var src= items.item(i).getElementsByTagName("content:encoded").item(0).getAttribute("src");
        //console.log("FIRST SRC TEST "+ src);
        var patt1=/([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))/i;


        var urlMatch = str.match(patt1);
        data.push({

            title: items.item(i).getElementsByTagName("title").item(0).text,            
            leftImage: urlMatch.length > 0 ? urlMatch[0] : 'NewsStory.png',
            dataToPass: items.item(i).getElementsByTagName("description").item(0).text,
            className: "TableRow", 
            hasChild: true, 
            jsTest: true,
            js:"external.js"
        });

    }

    table.setData(data);

};

xhr.onerror = function(e) {
    // should do something more robust
    alert('Network error '+e.error);
};

xhr.open('GET',url);
xhr.send();

win1.add(table);


win1.open();

2 个答案:

答案 0 :(得分:0)

您可以对match()的函数结果进行用户数组访问,如下:

// Prints 1st element of str.match(patt1) to console   
console.log(str.match(patt1)[0]);

但是如果你将来会使用匹配,你应该把结果数组放到变量中并使用它。

答案 1 :(得分:0)

我明白了这句话:

`leftImage: str.match(patt1) !== null ? str.match(patt1)[0] : 'NewsStory.png',

我忘了匹配在没有结果而不是未定义的情况下返回一个对象。