2013-06-20 4 views
0

Я использую Firefox 21. Я написал код ниже, чтобы отобразить содержимое хранилища объектов indexedDB при загрузке страницы.Индексированные событияDB не срабатывают

 window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || 
         window.msIndexedDB;  
     window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || 
         window.msIDBTransaction; 
     window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || 
         window.msIDBKeyRange; 

     var request = window.indexedDB.open('mgDB', 1); 
     request.onerror = function(e) { 
      alert('error'); 
     }; 

     request.onupgradeneeded = function(e) { 
      alert('upgradeneeded'); 
     }; 

     request.onsuccess = function(e) { 
      alert('success'); 
     }; 

Зная, что mgDB еще не существует, я ожидал, что обновленное событие будет запущено. Когда я отлаживал код с помощью Firebug, я вижу ошибку, onsuccess и onupgradeneeded с нулевыми значениями, поэтому ни одно из событий не запускается. Когда я выполняю код без режима отладки, я вижу, что событие успеха запускается. Кто-нибудь знает, почему это происходит?

ответ

2

Тот факт, что onupgradeded не срабатывает, заключается в том, что вы запускали код уже несколько раз, а база данных с первой версией сделана в первый раз. Логика открытой функции - создать db, если она не существует, обновить, если версия базы данных ниже, чем предоставленная версия. (Имейте в виду, что indexeddb является постоянным хранилищем, то есть он не уничтожается, если вы закрываете браузер). Если вы хотите быть уверенным, что хотите каждый раз вводить onupgradedededed (для тестирования кукол !!!), вы можете удалить базу данных до открывая/создавая его снова.

Тот факт, что события являются нулевыми, возможно, зависит от места, в которое вы положили точку останова? Поместите контрольную точку в один из обратных вызовов, и вы увидите, что onsuccess, onerror, ... будут заполнены на объекте запроса.

+0

Вы правы в необходимости удалить базу данных и начать заново, когда мне нужно протестировать. Позвольте мне подробнее рассказать о том, как я тестировал. Вчера, когда я начал тестировать, я несколько раз видел огонь по борьбе с терроризмом. Затем, прежде чем каждый раз, когда я тестировал, я удалил базу данных вручную и увидел, что событие onsuccess постоянно. Сегодня утром я снова тестировал, удалив базу данных вручную и очистив кеш Firefox + файлы cookie, и я видел, что события onupgradededed AND успешно срабатывают. –

+0

Вот как это должно быть, если вы обновите, onupgradeneeded будет запущен первым. В этом вы можете редактировать структуру. Как только это будет сделано, открывается соединение с базой данных, и вы можете начать использовать его для чтения, вставки, удаления, ... данных. –

Смежные вопросы