0

所以我使用 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;

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

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

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

4

2 回答 2

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'
}
于 2012-05-15T04:53:33.887 回答
0

让我们看一下jQuery的代码

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

于 2012-05-15T05:03:01.363 回答