繁体   English   中英

循环内的javascript函数仅运行一次

[英]javascript function inside loop run only once

我有一个javascript函数,基本上在我的数据上循环,我在循环内调用了另一个函数,但它仅在最后一个索引上执行一次,这是我的代码,并且我希望每次执行该函数。 基本上在循环内部,我调用在循环的每个索引上运行良好的ajax,但问题是调用仅在最后一个索引上执行的db.transaction函数

db.transaction(populateDB,errorCB);

function renderList(tx, results) {
   len = results.rows.length;
   console.log("rows" + results.rows.length);
   for (var i = 0; i < len; i++) {

       (function (i) {
           var nid = results.rows.item(i).nId;

           $.ajax({
                type: 'post',
                url: 'http://localhost:50972/LibraryService.asmx/GetTitleSections',
                dataType: 'json',
                data: "{'MainSectionId':'" + nid + "'}",
                contentType: 'application/json; charset=utf-8',
                async: false , 
                success: function (response) {
                    var data = response.d;
                    alert(data.nId);
                    TitleSectionData = data;
                },
                error: function (error) {
                    console.log(error);
                }
           });   
           db.transaction(TblTitleSection, errorCB);
       }) 
       (i);

       //  htmlstring += '<li>' + results.rows.item(i).strTitle + '</li>';
       // $('#resultList').append("<li>" + results.rows.item(i).strTitle + "</li>");
       $('#'+i).append( results.rows.item(i).strTitle );
       // $('#tblMainSection').append("<tr><td>" + results.rows.item(i).strTitle + "</td></tr>");
   }

   // $('#resultList').html(htmlstring);
}

也许在运行ajax调用时循环会继续。 您可以尝试将增量(i ++)放入成功函数中,以强制循环停止直到函数完成。 语法似乎还可以。

更换:

for (var i = 0; i < len; i++) {

带有:

for (var i = 0; i < len;){

success: function (response) {
    var data = response.d;
    alert(data.nId);
    TitleSectionData = data;
}

带有:

success: function (response) {
    var data = response.d;
    alert(data.nId);
    TitleSectionData = data;
    i++;
}

看看是否可行:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM