gpt4 book ai didi

Javascript:在脚本中声明全局变量并在另一个脚本中使用它

转载 作者:行者123 更新时间:2023-12-03 05:57:21 24 4
gpt4 key购买 nike

我一直在尝试使用脚本创建与 sqlite3 数据库的连接(主要思想来自 stackoverflow 答案),如下所示。在文件“checkbook.js”中,我有连接函数,在应该使用连接的函数下面,读取数据库并填写表单中的一些字段:

function connect_db(){
var xhr = new XMLHttpRequest();
xhr.open('GET', 'checks.db', true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
var uInt8Array = new Uint8Array(this.response);
db = new SQL.Database(uInt8Array);
};
xhr.send();
}

function fill_status(){
var contents = window.db.exec("SELECT rowid,name FROM aux_status");
values = contents[0].values;
for (j=0;j<values.length;j++){
var select = document.getElementById('status')
var option = document.createElement('option');
select.appendChild(option);
option.value = values[0];
option.innerHTML=values[1];
}

}

“checkbook.js”文件在“checks.html”文件中调用,该文件是:

<!DOCTYPE html>
<html>
<head>
<title>Checkbook v0.0.1</title>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
<link rel='icon' type='image/png' href='images/logo_ioniatex_bbg.png'>
<link rel='stylesheet' type='text/css' href='css/general.css'>
<script type='text/javascript' src='jscripts/general.js'></script>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<link rel='stylesheet' href='bootstrap-3.3.5-dist/css/bootstrap.min.css'>
<script src='bootstrap-3.3.5-dist/jquery-1.12.0.min.js'></script>
<script src='bootstrap-3.3.5-dist/js/bootstrap.min.js'></script>
<script src="sql.js"></script>
<script src="checkbook.js"></script>
</head>
<body>
...
<script>var db;connect_db();fill_status();</script>
</div>
</body>
</html>

但是当我打开文件(在 Firefox 中)时,我收到来自 firebug 的消息

TypeError: window.db is undefined
var contents = window.db.exec("SELECT rowid,name FROM aux_status");

我想念什么?我尝试使用或不使用 var 来声明 db 变量,甚至使用 window.db 调用函数“fill_status”但我仍然得到相同的答案。我想运行connect_db函数位于 html 文件的开头,并在一些代码之后运行另一个使用全局 db 的代码。变量,以免为我需要的每个数据提取调用到数据库的新连接。

最佳答案

这段代码:

xhr.onload = function(e) {
var uInt8Array = new Uint8Array(this.response);
db = new SQL.Database(uInt8Array);
};

作为 onload 事件的回调运行。因此,由于后者的异步特性,在以下情况下不会完成 window.db 的初始化:

window.db.exec("SELECT rowid,name FROM aux_status");

被执行。

您应该调用 fill_status 作为其他调用的回调

关于Javascript:在脚本中声明全局变量并在另一个脚本中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39873210/

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