Jquery (Mobile) и модуль PhoneGap не синхронизированы - PullRequest
0 голосов
/ 02 марта 2012

I ', новинка в API PhoneGap и у него есть проблемы с частью памяти вместе с петлями.Цикл завершится до первого вызова executeSql.

Psudo Пример:

list = [1,2,3];// Для этого примера идентификатор 1 имеет 3 тега, идентификатор 2 имеет 6 тегов, а идентификатор 3 имеет 9 тегов.

$. Каждый (список, функция (индекс, значение) {alert (value); tx.executeSql('SELECT tag_name FROM Tag WHERE parent =' + value, [], function (tx, results) {alert (results.rows.length);}, sqlError);});

Желаемый результат: 1, 3,2,6,3,9 Результат: 1,2,3,9,9,9

Таким образом, javascript завершается до выполнения tx, и запрос всегда будет "SELECT tag_name FROM Tag WHEREродитель = 3

1 Ответ

1 голос
/ 23 мая 2012

executeSql - это асинхронный метод, поэтому он вернется после завершения работы вашего javascript: поэтому вы всегда будете сначала получать «1,2,3».

Что касается того, почему вы получаете «9,9, 9 "вместо" 3,6,9 ", возможно, реализация phonegap использует статический объект для 'результатов', и он перезаписывается последним вызовом.

Я советую вам выполнить отдельную транзакцию для SELECT.Проверьте документацию для транзакций .

. Чтобы достичь желаемого результата, я бы сделал следующее:

$.each(list, function(index,value){ 
        db.transaction(function(tx) {
                tx.executeSql('SELECT tag_name FROM Tag WHERE parent = ' + value,
                        [],
                        function(tx, results) { 
                                alert(value);
                                alert(results.rows.length);
                        },
                        sqlError
                );
        });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...