我需要将C#代码转换为JavaScript,并且我遇到了异步数据库调用。 我是JavaScript的新手,我不知道如何解决这个问题。我知道必须使用回调函数,但我只是不知道如何编写它。我已经尝试了一些我在这个网站上找到但没有成功的例子。 如果有人可以帮助我,请帮助。
我在项目中有2个表。让我们说表1 和表2 。 Table1是父表,Table2是包含Table1项的子项。 它们与id连接。
表1 (Id,userid,Col1,Col2)
表2 (Id,Col1,Col2,Col3)
数据存储在SQL LITE数据库中,我需要调用该数据并以JSON格式发送。
我有下一个代码。
var Table1row = {};
var Table1Array = [];
var Table2row = {};
var Table2Array = [];
function GetTable1()
{
try
{
db.transaction(
function(transaction)
{
transaction.executeSql('SELECT * FROM Table1 WHERE userid = ?',
[userid], DataHandlerTable1, txError);
});
}
catch(e)
{
console.log(e.message);
}
}
function DataHandlerTable1 (tx,results)
{
var len = results.rows.length;
if(len > 0)
{
for(var i=0; i<len; i++)
{
row = results.rows.item(i);
Table1row ["id"] = row.id;
Table1row ["userid"] = row.userid;
Table1row ["Col1"] = row.Col1;
Table1row ["Col2"] = row.Col2;
Table1row ["Table2Array"] = GetTable2(row.id);
Table1Array.push(Table1row);
}
var jsonObject = { prod: Table1Array }
Type = "POST";
Url = "http://192.168.136.27:54076/Service1.svc/SaveResult";
ContentType = "application/json";
DataType = "json";
$.ajax({
type: Type,
url: Url,
contentType: ContentType,
data: JSON.stringify(jsonObject),
dataType: DataType,
success: function (json) {
},
error: function (jqXHR,exception) {
},
});
}
}
问题出在这一行:
Table1row ["Table2Array"] = GetTable2(row.id);
这不起作用,我不知道如何在JavaScript中以其他方式编写。 我需要存储 Table1row [“Table2Array”] GetTable2()函数的返回值。
function GetTable2(id)
{
db.transaction(function(transaction) {
transaction.executeSql('SELECT * FROM Table2 WHERE id = ?', [id], function (tx, results) {
var len = results.rows.length;
if(len > 0)
{
for(var i=0; i<len; i++)
{
row = results.rows.item(i);
Table2row ["id"] = row.id;
Table2row ["Col1"] = row.Col1;
Table2row ["Col2"] = row.Col2;
Table2row ["Col3"] = row.Col3;
Table2Array.push(Table2row);
}
return Table2Array;
}
});
});
}
有关于此的任何想法?
谢谢。
答案 0 :(得分:0)
您正在接近问题,听起来您不明白如何编写好的JavaScript代码。我建议你从“Javascript The Good Parts”这本书开始阅读。如果您使用的是异步代码,则需要将所有代码设置为异步。
一个粗略的想法如下。
function GetTable1(callback) {
[...]
transaction.executeSql('SELECT * FROM Table1 WHERE userid = ?',
[userid], function(tx, results) { DataHandlerTable1(tx, results, callback); }, txError);
[...]
}
function DataHandlerTable1 (tx,results,callback) {
[...]
GetTable2(row.id, function(value) {
Table1row ["Table2Array"] = value
});
[...]
callback(jsonObject);
}
function GetTable2(id, callback) {
[...]
callback(Table2Array);
return;
}
同样,假设你可以在没有对javascript语言的基本理解的情况下将c#移植到javascript上,这是一个坏主意。