0

我遍历 ajax 记录集并将行插入到 html5 数据库中。在 Google Chrome 中,该程序插入 581 行,而在 iPad 上,它只插入 20 到 80 行。

我将命令输出到文档正文只是为了确保它们正在运行,所以我知道 iPad 上正在运行 581 条插入语句,但表格中只有少数几条。

4

2 回答 2

0

好的,这就是我的做法。我首先删除表,然后在完成后创建表。然后,完成后,我进行 ajax 调用。当它返回时,我循环遍历记录集并插入到 html5 本地数据库中。

var DropTableiUsr = function() {
    var DropTableDeferred = new $.Deferred();
    var CreateTableDeferred = new $.Deferred();
    dbo.transaction(function(myTrans) {
        myTrans.executeSql(
            'drop table iUsr;'
            ,[]
            ,DropTableDeferred.resolve()
        );
    });
    DropTableDeferred.done(function() {
        dbo.transaction(function(myTrans) {
            myTrans.executeSql(
                'CREATE TABLE IF NOT EXISTS iUsr' 
                + '(UsrID Integer NOT NULL PRIMARY KEY'
                + ',UsrGradeDate Varchar(128)'
                + ');'
                ,[]
                ,CreateTableDeferred.resolve()
            );
        });
    });
    CreateTableDeferred.done(function() {
        var settings = {};
        settings.data = {};
        settings.data.method = 'View0';
        var myPromise = $(this).myAjax('com/Usr.cfc', settings); // 'this' normally points to the DOM element that is the context of what caused the Ajax call.
        myPromise.done(function(result) {
            if (result.RTN) {
                var qryUsr = result.qry.DATA;
                qryUsr.RecordCount = result.qry.ROWCOUNT;
                // qryUsr.ColumnList = result.qry.COLUMNS;
                for (var CurrentRow=0;CurrentRow < qryUsr.RecordCount;CurrentRow++) {
                    myFunction(CurrentRow);
                };
                function myFunction(CurrentRow) {
                    $('body').append('INSERT INTO iUsr(UsrID,UsrGradeDate) VALUES(' + qryUsr.USRID[CurrentRow] + ',' + qryUsr.USRGRADEDATE[CurrentRow] + ')<br>');
                    dbo.transaction(function(myTrans) {
                        myTrans.executeSql(
                            'INSERT INTO iUsr(UsrID,UsrGradeDate) VALUES(?,?)',
                            [
                                qryUsr.USRID[CurrentRow],
                                qryUsr.USRGRADEDATE[CurrentRow]
                            ]
                        )
                    });
                };
            } else {
                $('#msg').text(result.MSG);
            }
        });
        myPromise.fail(function(jqXHR, textStatus,C ) {
            alert('PopulateiUsr: ' + C);
            $('.container').append(jqXHR.responseText);
        })
        $('body').append('iUsr<br>');
    });
};

$('#Reset').click(function() {
    DropTableiUsr();
});
于 2012-05-02T20:08:04.397 回答
0

如果在处理某些内容时移动屏幕,它会停止处理。尝试在 INSERT INTO 回调上显示倒计时,如果向下滚动屏幕,您会看到它会停止倒计时。

于 2012-05-02T21:20:48.917 回答