Cordova SQLite插件仅在第一次调用时有效
Cordova SQLite plugin only works on first call
我有一个科尔多瓦应用程序,有两个页面,第一个页面有一个搜索字段,第二个显示第一个页面的结果。displayResults
函数
function displayResults(){
var query = localStorage.getItem('search');
var db = window.sqlitePlugin.openDatabase({name:"Store-DB", location: 1});
queryDB(db,query);
}
function queryDB(db,query){
db.transaction(function(tx) {
var queryList = query.split(" ");
var sqlText = "SELECT * FROM DB WHERE item LIKE '%"+queryList[0]+"%'";
for (i = 1; i < queryList.length; i++) {
sqlText += " OR item LIKE '%"+queryList[i]+"%'";
}
tx.executeSql(sqlText, [], querySuccess);
}
);
}
function querySuccess(tx,results) {
var i;
var len = results.rows.length;
//Iterate through the results
for (i = 0; i < len; i++) {
console.log(row);
//Get the current row
var row = results.rows.item(i);
var div = document.createElement("div");
div.style.background = "gray";
div.style.color = "white";
div.innerHTML = row;
document.body.appendChild(div);
}
alert("Finished");
}
这是第二页的代码:
<link rel="stylesheet" type="text/css" href="css/default.css">
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script src="js/zepto.js" type="text/javascript"></script>
<script src="plugins/com.brodysoft.sqlitePlugin/www/SQLitePlugin.js" type="text/javascript"></script>
<script src="js/code.js" type="text/javascript"></script>
<script type="text/javascript">
function onLoad(){
document.addEventListener("deviceready", onDeviceReady(), false);
}
function onDeviceReady(){
displayResults();
}
</script>
</head>
<body onload="onLoad()">
<div id="taskbar">
<a href="index.html">Home</a>
<a id="username" class="toolbar_item" style="float:right;" href="#"></a>
</div>
第一次加载此页面时displayResults
工作正常,但是如果您单击链接返回主页并再次加载第二个页面,控制台会打印错误ReferenceError: no "undefined" has no property "openDatabase"
换句话说,SQLite插件未加载。但是,如果我在按下按钮而不是onload
时触发displayResults
它每次都有效。这种特殊行为的解释是什么?
似乎有时 deviceready-event 要么根本不触发,要么在有更多不同库的事件处理程序时过早触发。第二个问题导致 brodysoft-plugin 未正确加载并作为 window.sqlitePlugin 属性分配给窗口对象,因为一个事件处理程序过早地调度了 deviceready-event。事实证明,setTimeout就是答案,因为它一直在这里
例如,您可以使用onpageshow事件
$('#idofyourpage').bind("onpageshow",function(){
//Do something
});
相关文章:
- 什么's是调用具有可变参数的函数的有效方法
- 调用 http url 有效,但 Https 不起作用
- Cordova SQLite插件仅在第一次调用时有效
- 使用 jQuery 调用 PHP 端点的最有效方法
- 在Rails中使用remote:true在Chrome中有效,但在Safari中无效——从js.erb文件调用succe
- 在Knockout视图模型中调用jQuery插件是一种有效的模式
- 从根本上说,函数调用出了问题.功能在控制台中确实有效
- 自定义角度过滤器提供TypeError.不能调用undefined,但变量已定义并有效
- 对API的Spring RestTemplate调用有效,但由于相同的原始策略,jQuery失败
- 为什么在定义导出属性之前调用module.exports时仍然有效
- MVC $.ajax 调用从不对编辑执行控制器操作,但在添加时有效
- 在 Javascript 中调用多个延迟的最有效方法是什么?
- 为什么在这里再次调用新是有效的
- jQuery AJAX 调用在 Firefox 中有效,但在 IE 中不起作用 - 返回有效响应
- 哪种代码更有效?(调用 JavaScript 函数)
- jQuery .val(#) 在 AJAX 调用后不会更改选择 - 如果调试/暂停,则有效
- 为什么在对象标记中调用函数是有效的
- Facebook API-FB.API()调用有效,但AJAX请求无效
- $.ajax调用有效,$http.get()无效(404,未找到)
- 当调用有效的json url时ERR_UNKNOWN_URL_SCHEME