我是Phonegap和Javascript的新手。我正在尝试将用户名值和密码值从登录表单保存到sqlite数据库。
这是我的login.html文件: -
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Login</title>
<link href="css/style.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="js/jquery-2.1.3.min.js"></script>
<script type="text/javascript" src="js/iscroll.js"></script>
<script type="text/javascript" src="js/login.js"></script>
</head>
<body>
<div class="wrapper">
<form action="submit" id="login" name="login_form">
<input type="text" id="uName" name = "UserName" placeholder="Username" value="Admin"/>
<br/>
<input type="password" id="password" name = "Password" placeholder="Password" value="super@1234"/>
<br/>
<button type="submit" id="submit" value="Submit">Login</button>
</form>
<script type="text/javascript">
$(document).ready(function() {
$("#submit").click(function() {
if($("#uName").val()==""){
alert("Please fill username field.");
//$("#uName").focus();
}
else if($("#password").val()==""){
alert("Please fill password field.");
//$("#password").focus();
}
else {
onDeviceReady();
}
});
});
</script>
</div>
</body>
</html>
这是我的login.js文件: -
var db;
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
db = window.openDatabase("UserDB", "1.0", "Login", 10000);
db.transaction(populateDB, transaction_err, populateDB_success);
}
function populateDB(tx) {
var userName = document.getElementById("uName").value;
var password = document.getElementById("password").value;
tx.executeSql('CREATE TABLE IF NOT EXISTS users (ID INT, USERNAME VARCHAR UNIQUE, PASSWORD VARCHAR)');
tx.executeSql('INSERT INTO users (ID,USERNAME,PASSWORD) VALUES ("'+1+'","'+userName+'","'+password+'")');
alert("" + userName + " " + password);
}
function transaction_err(tx, error) {
alert("Database Error: " + error);
}
function populateDB_success(tx) {
alert("Data successfully entered.");
window.open("file:///assets/www/view_login.html");
}
我的问题是,当我在我的Android设备中运行此代码时,它给了我应用程序错误:存在网络错误和 错误日志是: -
04-30 10:16:35.080 31868-31868/com.itpp.trt D/CordovaWebViewImpl onPageDidNavigate(file:///android_asset/www/submit?UserName=Admin&Password=super%401234)
04-30 10:16:35.080 31868-31934/com.itpp.trt E/AndroidProtocolHandler﹕ Unable to open asset URL: file:///android_asset/www/submit?UserName=Admin&Password=super%401234
04-30 10:16:35.090 31868-31868/com.itpp.trt D/SystemWebViewClient﹕ CordovaWebViewClient.onReceivedError: Error code=-1 Description=There was a network error. URL=file:///android_asset/www/submit?UserName=Admin&Password=super%401234
我无法找到问题在哪里请帮帮我。 谢谢,抱歉这个长期的问题。 :)
答案 0 :(得分:0)
表单正在尝试将提供的数据提交到url:'file:/// android_asset / www / submit'。
该网址是通过action
代码中的<form>
属性提交的:
<form action="submit" id="login" name="login_form">
为了防止这种情况发生,只需从标记中取出action属性。
由于您是Phonegap / Cordova的新手,您可能不知道您不应该等待document.ready
事件而是等待deviceready
。现在,当您更改此内容时,您的表单提交可能不再有效。这是因为当应用程序启动并准备使用时,deviceready
事件会触发一次。它不会等待按钮单击或deviceready
函数内声明的函数。
我们怎样才能让它再次发挥作用?这很简单,只需在单击提交按钮时调用一个函数即可。你需要做这样的事情:
<form id="login" name="login_form" onsubmit="mySubmitFunction();">
被调用的函数应如下所示:
function mySubmitFunction(){
$("login").unbind("submit"); //this removes the submit event-handler from the form
if($("#uName").val()==""){
alert("Please fill username field.");
}
else if($("#password").val()==""){
alert("Please fill password field.");
}
else {
//insert into your database
db.transaction(populateDB, transaction_err, populateDB_success);
}
}
在onDeviceReady函数内部只需打开数据库:
function onDeviceReady() {
db = window.openDatabase("UserDB", "1.0", "Login", 10000);
}