2012-02-08 94 views
0

我有一个基本的Web应用程序下面有一个SQLite存储措施实施到它。离线和在线同步HTML5中的Web应用程序?

我希望它能够在任何时候更新我的mysql服务器,并在连接失败后存储数据以推送到数据库。我希望它能够使用时间戳比较作为安全措施,以防服务器上的值有所不同,我们可以对邮票进行检查以确定它试图修改的信息是最新的值。 (这将从多台计算机运行,因此需要某种故障安全)。

我认为这个事务只需要一个方法,值只需要更新服务器,值不需要传回给应用程序,所以我们可以在技术上在真正完成时销毁数据库,或者如果它在某处出现故障,可能会执行回滚。这是一个可行的事情,还是我真的在这里要求很多?

这是我想用作模型的一个非常基本的应用程序。

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Golf score keeper</title> 
    <script src="http://www.google.com/jsapi"></script> 
    <script> 
     google.load("jquery", "1.4.1"); 
    </script> 
    <script> 
     var db = window.openDatabase("scores", "", "Previous Scores", 1024*1000); 

     function insertScore(hole_num, num_strokes, course_id, email) { 
     db.transaction(function(tx) { 
     tx.executeSql('INSERT INTO Strokes (course_id, hole_num, num_strokes, email) VALUES (?, ?, ?, ?)', [course_id, hole_num, num_strokes, email]); 
     }); 
     } 

     function renderResults(tx, rs) { 
    e = $('#previous_scores'); 
    e.html(""); 
    for(var i=0; i < rs.rows.length; i++) { 
     r = rs.rows.item(i); 
     e.html(e.html() + 'id: ' + r['id'] + ', hole_num: ' + r['hole_num'] + ', num_strokes: ' + r['num_strokes'] + ', email: ' + r['email'] + '<br />'); 
    } 
     } 

     function renderScores(email) { 
    db.transaction(function(tx) { 
     if (!(email === undefined)) { 
     tx.executeSql('SELECT * FROM Strokes WHERE email = ?', [email], renderResults); 
     } else { 
     tx.executeSql('SELECT * FROM Strokes', [], renderResults); 
     } 
    }); 
     } 

     $(document).ready(function() { 
    db.transaction(function(tx) { 
     tx.executeSql('CREATE TABLE IF NOT EXISTS Courses(id INTEGER PRIMARY KEY, name TEXT, latitude FLOAT, longitude FLOAT)', []); 
     tx.executeSql('CREATE TABLE IF NOT EXISTS Strokes(id INTEGER PRIMARY KEY, course_id INTEGER, hole_num INTEGER, num_strokes INTEGER, email TEXT)', []); 
    }); 

    $('#score_form').submit(function() { 
    strokes = { 1: $('#hole1').val(), 2: $('#hole2').val() }; 
     for (var hole_num in strokes) { 
     insertScore(hole_num, strokes[hole_num], 1, $('#email').val()); 
     } 

     renderScores(); 
     return false; 
    }); 

    $('#filter_previous_scores_form').submit(function() { 
     e = $('#filter_by_email').val(); 
     renderScores(e); 
     return false; 
    }); 

    renderScores(); 
     }); 
    </script> 
    </head> 
    <body> 
    <form method="get" id="score_form"> 
     <div> 
    <label for="1">Hole 1</label> 
    <input type="number" min="1" value="4" id="hole1" name="hole1" size="2" step="1" /> 
     </div> 
     <div> 
    <label for="2">Hole 2</label> 
    <input type="number" min="1" value="4" id="hole1" name="hole2" size="2" step="1" /> 
     </div> 
     <div> 
    <input type="email" id="email" placeholder="Enter your email address" size="40"/> 
     </div> 
     <div> 
    <input type="submit" value="Upload Score" /> 
     </div> 
    </form> 
    <div> 
     <h2>Previous Scores</h2> 
     <form id="filter_previous_scores_form"> 
    <input type="email" placeholder="Filter scores by email" size="40" id="filter_by_email" /><br /> 
    <input type="submit" value="Filter" /> 
     </form> 
    </div> 
    <div id="previous_scores"> 

    </div> 
    </body> 
</html> 

回答

0

您shoulg参加一个setInterval循环看看Ajax

0

当您发现navigator.online = true时,您可以应用设置间隔的逻辑,然后您可以调用ajax。

相关问题