【问题标题】:Javascript tx.executeSql() hit TypeError : type errorJavascript tx.executeSql() 命中 TypeError:类型错误
【发布时间】:2017-10-26 07:31:03
【问题描述】:

我正在测试从 MobileFirst v7 迁移到 v8 的混合应用程序。

现在我在尝试执行更新语句时收到“TypeError”:

var db = openDatabase();
var addr1 = document.getElementById('Addr1').value;
var addr2 = document.getElementById('Addr2').value;
var addr3 = document.getElementById('Addr3').value;
var id = document.getElementById('Id').value;

db.transaction(function (tx) {
    sqlupdate= "UPDATE Profile SET Addr1 = '" + addr1 + "', ";
    sqlupdate= sqlupdate + " Addr2 = '" + addr2 + "', ";
    sqlupdate= sqlupdate + " Addr3 = '" + addr3 + "' ";
    sqlupdate= sqlupdate + " where Id ='" + id + "'";

    tx.executeSql(sqlupdate,errorOn,successOn);
});

function errorOn()
{
    alert("Error");
}

function successOn()
{
    alert("Profile Saved");
}

我正在为 SELECT 和 INSERT 运行 tx.executeSql() 没有问题,此错误仅在 UPDATE 时发生。

谁能指出我的错误? 谢谢。

【问题讨论】:

  • 我很确定错误处理程序将被调用一些有用的信息,所以使用它们而不是只警告“错误”...
  • 嗨 Andreas,感谢您的建议,不幸的是,执行甚至没有进入 errorOn 回调。它只是在 tx.executeSql() 处停止,我拥有的唯一信息是来自控制台的错误消息。

标签: javascript ibm-mobilefirst web-sql


【解决方案1】:

好的...终于我得到了答案。问题出在此处:

tx.executeSql(sqlupdate,errorOn,successOn);

这个函数需要4个参数,需要切换回调的位置:

tx.executeSql(sqlupdate,*[updateParams]*,successOn, errorOn);

所以解决方案是将代码更改为以下代码:

db.transaction(function (tx) {
    sqlupdate= "UPDATE Profile SET Addr1 = ?, ";
    sqlupdate= sqlupdate + " Addr2 = ?, ";
    sqlupdate= sqlupdate + " Addr3 = ? ;
    sqlupdate= sqlupdate + " where Id =? ";

    tx.executeSql(sqlupdate,[addr1, addr2, addr3, id],successOn, errorOn);
});

为了最少的代码更改,您可以保留 sql,只需放置一个空数组即可:

tx.executeSql(sqlupdate,[],successOn, errorOn);

【讨论】:

    猜你喜欢
    • 2013-06-03
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多