【问题标题】:Unable to open asset URL: file:///android_asset/www/submit?UserName=Admin&Password=super%401234 in Phonegap Android?无法在 Phonegap Android 中打开资产 URL:file:///android_asset/www/submit?UserName=Admin&Password=super%401234?
【发布时间】:2015-04-30 05:22:44
【问题描述】:

我对 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

我找不到问题出在哪里,请帮助我。 感谢和抱歉这个长问题。 :)

【问题讨论】:

    标签: javascript android jquery sqlite cordova


    【解决方案1】:

    表单正在尝试将提供的数据提交到 url:'file:///android_asset/www/submit'。 url 是通过&lt;form&gt; 标签内的action 属性提交的:

    <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);
    }
    

    【讨论】:

    • 它的工作现在错误消失了,但 transaction_err 和 populateDB_success 不工作。警报未显示,请帮助我。
    • 嗯,我刚刚测试了它,对我来说它有效。 populateDB_success 中的警报弹出。你删除了'$(document).ready(function() {...})' 吗?
    • 我把代码改成了函数 submitData() { onDeviceReady(); if ($("#uName").val() == "") { alert("请填写用户名字段。") //$("#uName").focus(); } else if ($("#password").val() == "") { alert("请填写密码字段。"); //$("#password").focus(); } else { alert("它在这里"); db.transaction(populateDB, transaction_err, populateDB_success); } } abd 会弹出它的此处警报。但下一个不工作
    • 删除 onDeviceReady(); 。你不需要调用它,因为你有document.addEventListener("deviceready", onDeviceReady, false);,它会在设备准备好时调用 onDeviceReady 函数。
    • 我删除了 onDeviceReady() 所以它显示 db 变量是未定义的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多