任何人都可以在这个ajax .each函数中解释项目的来源吗?

时间:2012-05-15 04:51:55

标签: javascript jquery ajax

所以我使用etsy api和javascript调用这个ajax代码

$.ajax({ url: etsyURL, dataType: 'jsonp', success: function(data) {

我会返回一个对象数组吗?

并进入此.each函数

    if (data.ok) {          
        gallerySize=data.count;
        $.each(data.results, function(i,item) {  //assign array variables
           shopName=item.Shop.shop_name;

我想弄清楚的是 - 每个函数到底在做什么 - 我不明白'item'对象来自哪里,并且我试图访问.each函数之外的信息

例如 - 就像现在一样 - shop_name只需要声明一次,在每个方法中每次都有这个代码是没有意义的。当然有一种方法可以访问ajax函数调用的任何对象数组吗?

我确定这是一件相当简单的事情 - 我只是不明白它设置的.each语句的方式以及它引用的项目来自哪里

2 个答案:

答案 0 :(得分:4)

在您的代码中,$.each()遍历data.results

如果是数组,i是索引,item是该索引的值。

data.results = [
    'foo',          // i = 0, item = 'foo'
    'bar',          // i = 1, item = 'bar'
    'baz'           // i = 2, item = 'baz'
]

如果是对象,i是关键,item是该关键字下的值。

data.results = {
    'thefoo' : 'fooness',       // i = 'thefoo', item = 'fooness'
    'thebar' : 'barness',       // i = 'thebar', item = 'barness'
    'thebaz' : 'bazness'        // i = 'thebaz', item = 'bazness'
}

答案 1 :(得分:0)

我们来看看jQuery's code

each: function( object, callback, args ) {
    var name, i = 0,
        length = object.length,
        isObj = length === undefined || jQuery.isFunction( object );

    if ( args ) {
        if ( isObj ) {
            for ( name in object ) {
                if ( callback.apply( object[ name ], args ) === false ) {
                    break;
                }
            }
        } else {
            for ( ; i < length; ) {
                if ( callback.apply( object[ i++ ], args ) === false ) {
                    break;
                }
            }
        }

    // A special, fast, case for the most common use of each
    } else {
        if ( isObj ) {
            for ( name in object ) {
                if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
                    break;
                }
            }
        } else {
            for ( ; i < length; ) {
                if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
                    break;
                }
            }
        }
    }

    return object;
},

请参阅for ( name in object ) {for ( ; i < length; ) {
这就是你论证的循环 (非常聪明,jQuery,从未见过有人使用for这样的内容)

现在,请参阅callback.apply( object[ name ], args )
这是您的iitem