Javascript:如果稍后重定向到另一个页面,则无法将数据添加到数据库

时间:2014-04-06 15:41:09

标签: javascript database cordova

我对Javascript有一个非常奇怪的问题 我可以填写表单,然后单击“保存”将表单中的数据成功保存到数据库中 但是如果我将window.location.href = "deadlines.html"添加到插入到DB的函数的末尾,要重定向到该页面,数据将不会保存到db

这是代码:http://jsfiddle.net/ajSte/

<form id="formDeadlineInfo">
        <label for="shortDescription">Short Description</label>
        <input id="shortDescription"  type="text">
        <br>
        <label for="class">Class</label>
        <select id="class" class="ui-selectmenu" >
          <option value="HCI">HCI</option>
          <option value="DataMining">Data Mining</option>
          <option value="MobileDev">Mobile Dev</option>
          <option value="Ethics">Ethics</option>
        </select>
        <br>
        <label for="dueDate">Due Date</label>
        <input id="dueDate" type="date">
        <br>
        <label for="dueTime">Due Time</label>
        <input id="dueTime" type="time">
        <br>
        <label for="type">Type</label>
        <select id="type">
          <option value="Homework">Homework</option>
          <option value="Test">Test</option>
        </select>
        <br>
        <label for="additionalInfo">Additional Info</label>
        <input id="additionalInfo" type="text">
        <br>
        <label for="finished">Finished</label>
        <select data-role="flipswitch" id="finished" class="ui-selectmenu" >
          <option value="no" selected>No</option>
          <option value="yes">Yes</option>

        </select>

        <input type="button" class="ui-btn ui-btn-active ui-btn-icon-bottom" data-role="button" value="Save" style="text-align:center" onClick="getFormInfo()">

    </form>

和Javascript:http://jsfiddle.net/ajSte/ 对不起,#34; Code&#34;这个功能很难处理,请参阅jsfiddle

我已经在这些代码运行之前打开并填充了数据库,因此不需要询问它 非常感谢你,如果你可以帮我解决问题

1 个答案:

答案 0 :(得分:1)

  

但如果我添加window.location.href =&#34; deadlines.html&#34;到插入到DB的函数的末尾,为了重定向到该页面,数据将不会保存到db

一点都不奇怪。插入操作是异步,这意味着您的代码启动它,但随后它会完成(这就是它接受回调的原因)。

如果您告诉代码将用户从页面中移开,则在完成之前取消异步操作。您需要等待,然后在成功回调中使用该代码写入window.location.href

E.g:

function insertDeadlineToDB(dbId,dbDescription,dbClass,dbDueDate, dbDueTime, dbType, dbAdditionalInfo, dbFinished) {
    //alert('insert called');

    //alert('before insert');
    db.transaction(function(tx){
        tx.executeSql(
            'INSERT INTO deadlines (id, description, class, dueDate, dueTime, type, additionalInfo, finished) VALUES (?,?,?,?,?,?,?,?)',
            [dbId,dbDescription,dbClass,dbDueDate, dbDueTime, dbType, dbAdditionalInfo, dbFinished], function() {
               successCB();
               window.href.location = "deadlines.html"; // <=== Here
            }, errorCB);
        ////alert(tx);
   });
   //window.href.location = "deadlines.html";              <=== Not here
}

附注:代码中缺少变量,例如successCB,并未在任何地方定义。