您好我使用下面的代码来读取文本文件并将其内容导入本地SQLite。
function billtxt()
{
var billjson = '{"posts" : [',
i,
line = 0,
bill = 0,
Amountint,
Amountdec;
jQuery.ajaxSetup({
'beforeSend' : function(xhr) {
xhr.overrideMimeType('text/plain; charset=iso-8859-7');
},
});
jQuery.get('Bill.txt',function(data){
var mybill = [];
alert(data.length);
line=0;
for (i = 1; i <= ((data.length)/156); i += 1) {
billjson += '{"Id" :' + '"' + data.substr((line+0), 10).trim() + '"' + ',';
billjson += '"Code" :' + '"' + data.substr((line+10), 5).trim() + '"' + ',';
billjson += '"Address" :' + '"' + data.substr((line+14), 40).trim() + '"' + ',';
billjson += '"Name" : ' + '"' + data.substr((line+54), 50).trim() + '"' + ',';
billjson += '"Description" : ' + '"' + data.substr((line+104), 8).trim() + '"' + ',';
billjson += '"EntrySeason" : ' + '"' + data.substr((line+112), 23).trim() + '"' + ',';
billjson += '"Period" : ' + '"' + data.substr((line+112), 23).trim() + '"' + ',';
Amountint = data.substr((line+146), 7).trim();
Amountdec = data.substr((line+153), 2).trim();
billjson += '"Revenue" : ' + '"' + Amountint + '.' + Amountdec + '"' + '}';
line = i * 156;
if (line == data.length)
{
billjson += ']';
}
else
{
billjson += ',';
}
}
if (line == 0)
{
billjson += ']';
}
billjson += "}";
alert(billjson);
var mybilljson = jQuery.parseJSON( billjson );
alert(mybilljson.posts.length);
for (i = 0; i < (mybilljson.posts.length); i += 1) {
$.mobile.notesdb.transaction((function(i) {
return function(t){
console.log(mybilljson.posts[i].Name);
t.executeSql('INSERT into bill (barcode, buildingcode, buildingaddress, flatname, flatdescription, entryseason, period, amount) VALUES (?,?,?,?,?,?,?,?);',
[mybilljson.posts[i].Id, mybilljson.posts[i].Code, mybilljson.posts[i].Address, mybilljson.posts[i].Name, mybilljson.posts[i].Description, mybilljson.posts[i].EntrySeason, mybilljson.posts[i].Period, mybilljson.posts[i].Revenue]
);
}
})(i));
}
});
}
但我重申了以下错误
Uncaught TypeError: Cannot read property 'Id' of undefined
在以下行
[mybilljson.posts[i].Id, mybilljson.posts[i].Code, mybilljson.posts[i].Address, mybilljson.posts[i].Name, mybilljson.posts[i].Description, mybilljson.posts[i].EntrySeason, mybilljson.posts[i].Period, mybilljson.posts[i].Revenue]
我哪里错了?
答案 0 :(得分:1)
您的第一个问题是,当您使用基于JavaScript的0时,您将阵列用作基于1的阵列 此
for (i = 1; i <= (mybilljson.posts.length); i += 1) {
应该是
for (i = 0; i < (mybilljson.posts.length); i += 1) {
另一个问题是你在循环中创建匿名函数,如果匿名函数在循环的下一次迭代之前没有执行i
的值会改变,你可以使用IIFE返回一个函数将在循环的当前迭代中使用i
的值。
notesdb.transaction((function(i){
return function(t) {
t.executeSql('INSERT into bill (barcode, buildingcode, buildingaddress, flatname, flatdescription, entryseason, period, amount) VALUES (?,?,?,?,?,?,?,?);',
[mybilljson.posts[i].Id, mybilljson.posts[i].Code, mybilljson.posts[i].Address, mybilljson.posts[i].Name, mybilljson.posts[i].Description, mybilljson.posts[i].EntrySeason, mybilljson.posts[i].Period, mybilljson.posts[i].Revenue]
);
}
})(i));
答案 1 :(得分:0)
for (i = 1; i <= (mybilljson.posts.length); i += 1) {
在javascript中,数组从零开始编制索引。相反,尝试:
for (i = 0; i < (mybilljson.posts.length); i++) {
坦率地说,你的代码有点混乱。我很幸运,我发现了这个错误。可能还有其他人。
答案 2 :(得分:0)
你的for循环应该从0开始。
for (i = 0; i < (mybilljson.posts.length); i++) {
....
}