jQuery“each” - 数据......改变......在循环的另一端

时间:2011-07-07 19:04:32

标签: javascript jquery

所以我抓住这个XML数据,并在这个jQuery.ajax调用的成功函数中解析它。

var d1 = [];
jQuery.ajax( 
    {   url: ("/charts/quotes/" + name + ".xml"),
        success: function( data )
        {
            var dString; var qString; var d; var q;
            jQuery(data).find("HistoricalQuote").each(
            function () {
                dString = $(this).children("Date").text();
                qString = $(this).children("LastClose").text();
                d = Date.parse(dString);
                q = parseFloat(qString);
                d1.push( [ d, q ] );
                console.log( d1[d1.length-1][0] + ": " + d1[d1.length-1][1] );
                /* ^ First Log ^ */
            } );
            console.log( d1.length );
            for ( var q in d1 )
            {
                console.log(q[0] + ": " + q[1]);
                /* ^ Second Log ^ */
            }
        },
        async: false /*The success function must complete before we continue.*/
    });

现在,第一个日志正在给我回复我期望的数据 - “d”是一个非常长的整数,看起来它可能是一个时间戳,而“q”是股票报价 - a漂浮在26左右。

这是奇怪的事情。除了每个循环(“第二个日志”)之外 - 我得到了一组截然不同的数据。它始于:

(对不起,行返回... Stack Overflow正在做一些奇怪的事情)

0:未定义

1:未定义

2:未定义

3:未定义

4:未定义

5:未定义

6:未定义

7:未定义

8:未定义

9:未定义

...然后继续:

1:0

1:1

1:2

...

1:9

2:0

...

3:9

4:0

这是否与我第二次循环播放的方式有关?或者“推”的方式有效吗?世界上到底发生了什么?

1 个答案:

答案 0 :(得分:1)

q实际上将是d1中项目的索引,而不是值。您可能希望执行以下操作:

        for ( var q in d1 )
        {
            console.log(d1[q][0] + ": " + d1[q][1]);
            /* ^ Second Log ^ */
        }

然而,在数字索引数组中使用for / in是一个坏主意...请参阅heikki评论中的链接。