Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript phonegap上的db.transaction存在问题_Javascript_Android_Cordova_Web Sql - Fatal编程技术网

Javascript phonegap上的db.transaction存在问题

Javascript phonegap上的db.transaction存在问题,javascript,android,cordova,web-sql,Javascript,Android,Cordova,Web Sql,我有一个功能,可以将一些数据保存到我的数据库中,并且在cordova 2.4上运行良好,但是我升级到cordova 2.6,我的数据库开始出现一些问题,速度变慢,并且开始出现回调问题 我的第一个问题是,当我调用tx.executeSql时,会触发对db.transaction的回调 function populateDB(tx) { tx.executeSql('DROP TABLE IF EXISTS DEMO'); /* <-- succesCB is fired */

我有一个功能,可以将一些数据保存到我的数据库中,并且在cordova 2.4上运行良好,但是我升级到cordova 2.6,我的数据库开始出现一些问题,速度变慢,并且开始出现回调问题

我的第一个问题是,当我调用tx.executeSql时,会触发对db.transaction的回调

function populateDB(tx) {
     tx.executeSql('DROP TABLE IF EXISTS DEMO'); /* <-- succesCB is fired */
     tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)'); /* <-- succesCB is fired again */
     tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")'); /* <-- succesCB is fired again */
     tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")'); /* <-- succesCB is fired again */
}

function errorCB(err) {
    alert("Error processing SQL: "+err.code);
}

function successCB() {
    alert("success!");
}

var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
db.transaction(populateDB, errorCB, successCB);
函数填充b(tx){

tx.executeSql('DROP TABLE IF EXISTS DEMO');/*您最好使用html5数据库而不是phonegap的数据库。

您最好使用html5数据库而不是phonegap的数据库。

我不太确定您的问题,但我看到了几个问题

WebSQL版本化的打开被破坏。建议的打开过程在没有版本的情况下打开,然后使用版本更改事务,如下所示

var db = window.openDatabase("Database", '', "Cordova Demo", 200000)
if (db.version != '1.0') {
   db.versionChange(...)
}
另一个是重用来自请求回调的tx

tx.executeSql('DROP TABLE IF EXISTS DEMO', [], function (t, r) {
  t.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
});
从您的代码来看,tx执行不是按顺序执行的。浏览器可以按任意顺序执行这四个命令


关于两个
window.openDatabase
,一个是本机浏览器(如果支持),另一个是通过插件的phonegap polyfill。

我不太确定您的问题,但我发现了两个问题

WebSQL版本化的打开被破坏。建议的打开过程在没有版本的情况下打开,然后使用版本更改事务,如下所示

var db = window.openDatabase("Database", '', "Cordova Demo", 200000)
if (db.version != '1.0') {
   db.versionChange(...)
}
另一个是重用来自请求回调的tx

tx.executeSql('DROP TABLE IF EXISTS DEMO', [], function (t, r) {
  t.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
});
从您的代码来看,tx执行不是按顺序执行的。浏览器可以按任意顺序执行这四个命令


关于两个
window.openDatabase
,一个是本机浏览器(如果支持),另一个是通过插件的phonegap polyfill。

这里的问题是,这两个都以完全相同的方式调用
window.openDatabase(“数据库”,“1.0”,“Cordova Demo”,200000)
这里的问题是两个have的调用方式完全相同
window.openDatabase(“Database”,“1.0”,“Cordova Demo”,200000)
很高兴知道所有这些东西,但这并没有解决我的问题。Cordova(phonegap)告诉我这个问题是因为android 4.0在webSQL上使用了shim,但我仍然认为这是一个错误,因为在cordova 2.5上它可以工作,在cordova 2.6上它不能。我会花时间查看cordova文件并找出差异。为什么不试试我的数据库库呢?它可以工作。感谢你知道所有这些东西,但它没有解决问题我的问题。一个cordova(phonegap)告诉我,问题是因为android 4.0在webSQL上使用了shim,但我仍然认为这是一个bug,因为cordova 2.5上它工作,cordova 2.6上不工作。我会花时间查看cordova文件并找出差异。为什么不试试我的数据库库,它会工作。