gpt4 book ai didi

jquery - 为什么在从 sqlite 获取数据时我会在这个循环中自行增加值?

转载 作者:行者123 更新时间:2023-12-01 16:23:15 25 4
gpt4 key购买 nike

您能告诉我为什么当我从数据库获取数据时 i 的值会自行增加吗?实际上,我正在从电话间隙中的表中获取数据。但同时我还计算另一个表中的元素数量。同时获取 i 的值自行增加并收到错误。项目索引超出范围。

function getallTableData(tx) {

tx.executeSql('SELECT * FROM CaseTable', [], querySuccess, errorCB);
}

function querySuccess(tx, result) {

var len = result.rows.length;
var countDoument = 0
$('#folderData').empty();
for (var i = 0; i < len; i++) {

alert(i) // here value is i =0

test1 = result.rows.item(i).CaseName;



Test1(test1, function (result_count) {
countDoument = result_count; // here it count value
alert(result_count + "result_count") //alert is correct count value
alert(i + "i"); //here i comes 1 why ? it should be 0

$('#folderData').append(
'<li class="caseRowClick" id="' + result.rows.item(i).id + '" data-rel="popup" data-position-to="window">' + '<a href="#">' + '<img src="img/Blue-Folder.png">' + '<h2>' + result.rows.item(i).CaseName + countDoument + '</h2>' + '<p>' + result.rows.item(i).TextArea + '</p>' + '<p>' + result.rows.item(i).CaseDate + '</p>' + '</a>' +
'<span class="ctrl togg"><fieldset data-role="controlgroup" data-type="horizontal" data-mini="true" ><button class="edit button_design">Edit</button><button class="del button_design">Delete</button></fieldset><span>' + '</li>'
);

});

$('#folderData').listview('refresh');




}


}

function Test1(test, callBack) {
var x;
db.transaction(function (tx) {
$yoursql = 'SELECT * FROM "' + test + '" ';
tx.executeSql($yoursql, [], function (tx, results) {
x = results.rows.length + "TableName" + test;
callBack(x);
});
});

}

也检查我的评论..!!

最佳答案

您通过“Test1”传递到数据库函数的回调不会立即调用。稍后当数据库操作完成时调用它。当发生这种情况时,“i”已经增加了。

如果您想保留数据库操作启动时“i”的值,您必须复制它。在 JavaScript 中执行此操作的方法是将匿名函数包装在另一个匿名函数中,如下所示:

    Test1(test1, function(i) {
return function(result_count) {
countDoument = result_count; // here it count value
alert(result_count + "result_count") //alert is correct count value
alert(i + "i");

$('#folderData').append(
'<li class="caseRowClick" id="' + result.rows.item(i).id + '" data-rel="popup" data-position-to="window">' + '<a href="#">' + '<img src="img/Blue-Folder.png">' + '<h2>' + result.rows.item(i).CaseName + countDoument + '</h2>' + '<p>' + result.rows.item(i).TextArea + '</p>' + '<p>' + result.rows.item(i).CaseDate + '</p>' + '</a>' +
'<span class="ctrl togg"><fieldset data-role="controlgroup" data-type="horizontal" data-mini="true" ><button class="edit button_design">Edit</button><button class="del button_design">Delete</button></fieldset><span>' + '</li>'
);
};

}(i));

请注意,在最后一行,调用了包装函数并传递了“i”的值。包装函数返回原始函数,因此“Test1”仍然传递相同的内容。不同之处在于,现在您的原始函数是在包装器中构建的,并且包装器有自己的“i”的私有(private)副本。当数据库事务完成并调用您的函数时,“i”的副本仍将具有操作开始时的值。

关于jquery - 为什么在从 sqlite 获取数据时我会在这个循环中自行增加值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17762679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com