2014-09-28 75 views
1

我是Cordova的新手,目前正在使用它。我現在正在創建一個登錄腳本,但是當我提交表單時,它看起來像數據庫不會作出反應。Cordova WebSQL - onSubmit

以下是我想要做的事:

  1. 當API的加載,創建一個表並插入一條記錄。
  2. 當用戶提交表單時,檢查插入的數據是否等於表的數據。
  3. 如果匹配,則轉到新頁面。

我甚至沒有得到警報invalid ...當我插入一些無用的東西。我在啓動應用程序時收到了success!提醒。

HTML:

<form id="login" onsubmit="check_login();" class="form-signin"> 
    <input id="username" type="text" class="form-control" placeholder="Name" required autofocus> 
    <input id="password" type="password" class="form-control" placeholder="Password" required> 
    <button class="btn btn-lg btn-primary btn-block" type="submit"> 
     Sign in 
    </button> 
</form> 

JAVASCRIPT:

var db; 

function check_login() { 
    var username = $("#username").val(); 
    var password = $("#password").val(); 
    db.transaction(function(tx) { 
     tx.executeSql('SELECT * FROM LOGIN WHERE username=? AND password=?', [username, password], function(tx, results) { 
      if (results.rows) { 
       window.location = "main.html"; 
      } else { 
       alert("Invalid username or password"); 
      } 
     }, null); 
    }); 
} 

// Wait for device API libraries to load 
// 
document.addEventListener("deviceready", onDeviceReady, false); 

// device APIs are available 
// 
function onDeviceReady() { 
    db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000); 
    db.transaction(populateDB, errorCB, successCB); 
} 

// Populate the database 
// 
function populateDB(tx) { 
    tx.executeSql('DROP TABLE IF EXISTS LOGIN'); 
    tx.executeSql('CREATE TABLE IF NOT EXISTS LOGIN (id unique, username, password)'); 
    tx.executeSql('INSERT INTO LOGIN (id, username, password) VALUES (1, "Admin", "Admin")'); 
} 

// Transaction error callback 
// 
function errorCB(tx, err) { 
    alert("Error processing SQL: " + err.code); 
} 

// Transaction success callback 
// 
function successCB() { 
    alert("success!"); 
} 
+1

來自文檔:對於SQL select語句,rowsAffected始終爲0。對於插入或更新語句,它會返回已修改的行數。所以,請改用'if(results.rows)'。 – Regent 2014-09-28 13:21:01

+0

啊thanx !!將更新,在代碼中嘗試它,但我的代碼沒有得到if語句。所以問題依然存在。 – 2014-09-28 13:26:53

+0

在check_login執行過程中,您是否在控制檯中發現錯誤?確保'function(tx,results)'被執行(你可以通過在開始時設置'alert'或者用'errorCB'替換'null'來檢查它)? – Regent 2014-09-28 13:38:26

回答

2

解決它!首先我需要防止提交按鈕的默認事件。第二我不認爲results.row是足夠的,但這將做if (results.rows.length > 0)

我現在使用的代碼:效果很好!

function check_login() { 
     event.preventDefault(); // cancel default behavior 
     var username = $("#username").val(); 
     var password = $("#password").val(); 
     db.transaction(function(tx) { 
      alert(tx + "test"); 
      tx.executeSql('SELECT * FROM LOGIN WHERE username=? AND password=?', [username, password], function(tx, results) { 
       if (results.rows.length > 0) { 
        window.location = "main.html"; 
       } else { 
        alert("Invalid username or password"); 
       } 
      }, errorCB); 
     }); 
    }