У меня возникли проблемы с вставкой строк в базу данных SQL. Я хочу превратить массив объектов в таблицу SQL в javascript.Асинхронный ввод SQL в цикле
Следующий код добавляет только первый объект массива. Я пробовал все, что мог найти в stackoverflow и в другом месте, и не могу заставить его работать.
Любая помощь будет оценена по достоинству. Благодарю.
for (var i = 0; i < arr.length; i++) {
db.save({key:i+"", value:arr[i]}, function(e){
});
}
UPDATE 1: Я изменил его mathec примера М. и сузил проблему немного.
Количество вставленных строк зависит от размера вставляемого объекта. Таким образом, это имеет какое-то отношение к времени, которое требуется для обработки каждого объекта.
Как решить эту проблему? Благодарю.
Update 2:
Я принял предложение Роберта Янга ниже и включен автономный пример.
В приведенном ниже примере вставляются только первые 5 элементов. Если я удаляю часть текста слова в тестовом ключе, поэтому он только говорит «слово» один раз, затем вставляется 10 элементов. Так что теперь я уверен, что это имеет какое-то отношение к времени, которое требуется для обработки каждого объекта.
<html>
<head>
<script src="jquery.js"></script>
<script src="lawnchair.js"></script>
<script type='text/javascript'>
var db = "";
var arr = [];
arr.push({name:"a1", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a2", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a3", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a4", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a5", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a6", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a7", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a8", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a9", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a10", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a11", test:"word word word word word word word word word word word word word word "});
$(function() {
db = new Lawnchair({table:'t50'}, function(e){
for (i = 0; i < arr.length; i++) {
(function(i) {
add_row(i);
}(i));
}
});
});
function add_row(i) {
db.save({key:i+"", value:arr[i]}, function(e){
});
}
</script>
</head>
<body>
</body>
</html>
UPDATE 3: Я использовал предложенный код Роберта и придумал, после чего работал с тремя маленькими элементами. Поэтому я изменил первый элемент, сделав его больше, чем другие, чтобы проверить его. Первый элемент не был добавлен, а последние два были. Есть ли ограничение по времени для обработки массива?
<html>
<head>
<script src="jquery.js"></script>
<script src="lawnchair.js"></script>
<script type='text/javascript'>
var arr = [];
var db = "";
$(function() {
db = new Lawnchair({table:'t51'}, function(e){
arr=[{key:"k1", value:"v1. Because the contents of this element are larger than the others it will not be added for some reason. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. "}
,{key:"k2", value:"v2"}
,{key:"k3", value:"v3"}]
db.batch(arr, function() {
db.all(function (recs) { for (r in recs) {console.log(recs[r].key +"| "+ recs[r].value) } });
});
});
});
</script>
</head>
<body>
</body>
</html>
Я не вижу проблем с первым фрагментом кода, который вы отправили, за исключением того, что аргумент обратного вызова не нужен, если вы его не используете. Кажется, что-то странное происходит. Не могли бы вы опубликовать [короткий, самодостаточный пример] (http://sscce.org/) проблемы? –
Привет, Роберт, я добавил полный пример, который вы предложили. Есть идеи? Благодарю. – user1389968