gpt4 book ai didi

javascript - Cordova SQLite 插件仅在第一次调用时有效

转载 作者:行者123 更新时间:2023-12-03 10:34:57 25 4
gpt4 key购买 nike

我有一个有两个页面的 Cordova 应用程序,第一个页面有一个搜索字段,第二个页面显示第一个页面的结果。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”没有属性“openDatabase”,换句话说,SQLite 插件未加载。但是,如果我让 displayResults 在按下按钮时触发,而不是 onload ,它每次都会起作用。这种奇怪行为的解释是什么?

最佳答案

有时,当存在不同库的更多事件处理程序时,deviceready-event 似乎根本不触发或过早触发。第二个问题导致 brodysoft-plugin 未正确加载并作为 window.sqlitePlugin 属性分配给 window-object,因为一个事件处理程序过早调度 deviceready-event。事实证明 setTimeout 就是答案,就像 here 一样。

关于javascript - Cordova SQLite 插件仅在第一次调用时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29039236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com