我对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
我已经在这些代码运行之前打开并填充了数据库,因此不需要询问它 非常感谢你,如果你可以帮我解决问题
答案 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
,并未在任何地方定义。