【问题标题】:Triggering function on an particular count in a for loop在 for 循环中触发特定计数的函数
【发布时间】:2015-06-18 07:55:23
【问题描述】:

我正在循环运行一个 sql 查询。只有当循环计数等于 500 时,查询才会运行。

对于 E,g

$.ajax({

    response:function(e){

    // Here e.length will be unknown

    for(var i in e){

        if(q1cnt <= 500){
            // do some appending 
            var k = k + 1 ;
            if(q1cnt == 500){
                tx.executeSql(k);           
            }
        }

    }


    }
})

在上述情况下,如果计数达到 500,我想执行 sql 操作,我的问题是,如果前两个 500 的响应长度为 1344,那没关系,但我如何调用 tx.executeSql(k);在 433 项的末尾。

【问题讨论】:

  • response: 是什么?这不是标准的$.ajax() 选项。
  • 仅供参考,当我看到我的答案中的接受时,我不记得答案是什么,所以看了看,在我的代码 sn-ps 中发现了两个严重的错误。很抱歉,它们现在都已修复。
  • 是的,但我发现了使用您的代码解决我的问题的流程,所以我接受了它

标签: javascript jquery cordova


【解决方案1】:

注意:我不知道您提供给$.ajax 的对象中的这个response 属性是什么;这是not in the standard options。但我假设你使用它是有原因的,也许是一些插件。如果不是,请将下面的response 更改为success

你说过e.length 将是“未知的”。我假设您的真正意思是“未知”,而不是undefined,而e 实际上是一个数组。如果这是真的:

$.ajax({

    response:function(e){
        var i;

        // Here e.length will be unknown

        for (i = 0; i < e.length; ++i) {
            if (i <= 500) {
                // do some appending
                if (i === 500) {
                    tx.executeSql(i);
                }
            }
        }
    }
});

如果这不是正确并且e是一个非数组对象,那么请注意到ES5,对象属性没有定义的顺序所以for-in可能会以您不期望的顺序访问它们。 (In ES6, they will have an order.)

需要注意的是:

$.ajax({

    response:function(e){
        var i, count;

        // Here e.length will be unknown

        count = 0;
        for (i in e) {
            if (count <= 500) {
                // do some appending
                if (count === 500) {
                    tx.executeSql(count);
                }
            }
            ++count;
        }
    }
});

【讨论】:

    【解决方案2】:

    我仍然很困惑,为什么可能需要从 JS 为每 500 个对象执行 SQL 查询。不过,我可能知道如何做到这一点。

    看起来你正在使它复杂化,而无需额外的计数器、标志等就可以解决它。

    这是通过 Ajax 请求获取值的循环。
    然后,它对每 500 个数据项和最后一个数据项执行tx.executeSql

    $.ajax({
        response: function(e)
        {
            for (var i = 0; i < e.length; i++)
            {
                if (i % 500 === 0 || i === e.length - 1)
                {
                    tx.executeSql(i);           
                }
            }
        }
    });
    

    您提供了一段非常奇怪的 Ajax 调用代码。如果它是一种“不同”的 AJAX,那么没关系。但是,说到jQuery AJAX,语法应该是这样的:

    $.ajax({
        // options
    }).done(function(e)
        {
            for (var i = 0; i < e.length; i++)
            {
                if (i % 500 === 0 || i === e.length - 1)
                {
                    tx.executeSql(i);           
                }
            }
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      相关资源
      最近更新 更多