0

私はデータベースを使用しており、以下のコードで正常に動作しています

db = window.openDatabase("Sample", "1.0", "PhoneGap Demo", 200000);
    db.transaction(getDetails, transaction_error);

function transaction_error(tx, error) {
    $('#busy').hide();
    alert("Database Error: " + error);
}

function getUserDetails(tx) {
var sql = "select id, Name,  DisplayName from details where Name=Name";
    try {
        tx.executeSql(sql, [],getList_success);
    }
    catch(err)
    {
        alert(err);
    }
}

function getList_success(tx, results)
{
    var len = results.rows.length;
    for(var i=0; i <len; i++)
    {
        //Some code goes here
        }
    db = null;
}

関数を使用したいのですが、getUserDetailsパラメーターgetList_successを渡すことで、以下のコードを試してみましたが、エラーが発生しました

db = window.openDatabase("Sample", "1.0", "PhoneGap Demo", 200000);
    getUserDetails(db);


function getUserDetails(tx) {
var sql = "select id, Name,  DisplayName from details where Name=Name";
    try {
        tx.executeSql(sql, [],getList_success);
    }
    catch(err)
    {
        alert(err);
    }
}

エラーはTypeError:'undefined' is not a functioncatch ブロックにあります。これを解決するのに役立つ人はいますか? 前もって感謝します

4

3 に答える 3

1

問題は、コールバック関数を db.transaction に渡していることです。呼び出し先にデータを提供したい場合は、クロージャーを使用して、呼び出し元のコンテキストでこれを提供する必要があります。

var db = window.openDatabase("Sample", "1.0", "PhoneGap Demo", 200000);
var context = {val1: 'x', val2: 'y'};
db.transaction(function(tx){
        myfunction(tx,context);
    },
    tx_error,
    tx_success);

function myfunction(ty,context){
    tx.executeSql(query,[context.val1,context.val2],myf_success,myf_error);
}

これは新しいスレッドで発生することに注意してください。したがって、db.transaction を呼び出す場合は、これが呼び出し元に対して同時に発生することに注意してください。たとえば、jQuery.ajax() 呼び出しの成功コールバック内から db.transaction() を呼び出している場合、ajax スレッドが実行され、トランザクションがまだ進行中に完全なコールバックが実行される場合があります。

于 2013-10-17T07:14:19.287 に答える
-1

あなたのコードを見てください:

db.transaction(getDetails, transaction_error);

詳細を取得!

宣言した関数を見てください。

関数 getUserDetails(tx) {...}

function getList_success(tx, results) {....}

getDetails は getUserDetails ではありません....

そのため、エラーが発生しています。

于 2013-05-10T22:44:04.430 に答える