2

IndexedDb add トランザクションの onsuccess コールバックで関数を使用しようとしていますが、何らかの理由で onsuccess コールバックが呼び出されません。私は基本的にムービー オブジェクトを IndexedDb に追加しようとしました。コールバックでは、カーソルを繰り返して indexedDb 内のすべてのムービーを表示しようとしました。
新しく追加されたムービーも表示されるといいのですが。しかし、コールバックは失敗しています。以下は私のコードです。誰かが私に何が問題なのか教えてもらえますか?

var movieName=document.getElementById('movieInput').value;
var movieDataToStore = [{ movieid: "5", name: movieName, runtime:"60"}];
var request = indexedDB.open("movies", 1);
request.onsuccess = function(event) {
    db = event.target.result;
    //var transaction = window.db.transaction(["movies"], "readwrite");
    //alert(db.transaction("movies").objectStore("movies").add(null));
    var requestDataadd=window.db.transaction(["movies"],"readwrite").objectStore("movies").add(movieDataToStore[0]);
    requestDataadd.onsuccess = function(event) {
        window.db.transaction("movies").objectStore("movies").openCursor().onsuccess = function(event) {
            var cursor = event.target.result;
            if (cursor) {
                alert("CURSOR: movie: " + cursor.key + " has name " + cursor.value.name);
                cursor.continue();
            } else {//writeLog("CURSOR: No more entries!");
                alert("Cursor at the Load Button unabe to open");
            }
        };
    };
};
4

2 に答える 2

0

「Load Button unabe to open にカーソルがあります」というアラートが表示されていませんか?

一見したところ、問題は、requestDataaddこのオブジェクトを以前に 1 回 (正常に) 挿入したことがあるためにリクエストが失敗し、重複キー エラーが発生することだと思います。しかし、リクエストonerrorに対して定義されたリスナーがありません。requestDataadd

ただし、 onsuccess リスナーがrequestDataadd実際に呼び出された場合 (そしてアラートが表示された場合) は、そうではありません。

また、リクエストonerrorに対してリスナーが定義されていないようです。openCursorより多くの洞察を得るために、それを変更することをお勧めします。通常、常にonerroronsuccessハンドラーの両方を定義する必要があります。

于 2013-05-07T20:13:14.043 に答える