谁能解释一下这个 ajax .each 函数中的项目来自哪里

Can anyone explain where item comes from in this ajax .each function?

本文关键字:函数 项目 each ajax 能解释 一下      更新时间:2023-09-26

所以我使用 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 语句的方式以及它引用的项目来自哪里

在您的代码中,$.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'
}

让我们来看看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.