2013-09-10 3 views
0

Я использую код этого сообщения, чтобы генерировать файлы artist.json и event.json каждый раз при сохранении, обновлении или удалении исполнителя (пользовательский тип сообщения) в Wordpress. Мой вопрос, вероятно, не связан с WP, поэтому я размещаю его здесь.json to itemhash отключается

Файл JSON используется как вход для типа theadhead .js. Этот typeahead дает странное поведение (см. this post), и теперь кажется, что что-то не так с тем, как файл json хранится в локальном хранилище.

Проблема, похоже, лежит в точке, где json-файл преобразуется в локальный элемент itemhash хранилища (в этом я действительно не испытываю). Файл json отформатирован как ["artist1", "artist2", "artist3", "..."], и если я использую вкладку «Ресурсы» в инструментах разработчика Chrome, я вижу, что json-файл преобразуется и хранится в локальном хранилище, но если я вставляю содержимое __Artists__itemHash в txt-файл, я вижу, что в конце файл отключается. Я предполагаю, что это вызывает проблему с typeahead?

Содержимое из itemHash

{ 
"0": 
    { 
    "value":"test10", 
    "tokens": ["test10"], 
    "datum": {"value":"test10"} 
    }, 
"1": 
    { 
    "value":"test8", 
    "tokens":["test8"], 
    "datum":{"value":"test8"} 
    }, 
"2": 
    { 
    "value":"test7", 
    "tokens":["test7"], 
    "datum":{"value":"test7"} 
}, 

и т.д ... В конце файла выглядит примерно так:

"278": 
{ 
"value":"Luna // The file ends here... 

Есть около 8000 художников в файле JSon в целом и этот файл (как в: все художники есть). Возможно, это связано с максимальным размером файла в локальном хранилище? Это единственное, что я могу сделать, надеюсь, кто-то знает, как работает этот локальный накопитель, и почему файл отключается.

Для справки, Javascript (добавлено Время_жизни для отладки):

$(document).ready(function() { 
    $('input.search-event').typeahead({ 
     name: 'Events', 
     prefetch: '/media/json/events.json', 
     ttl: 0, 
     limit: 10 
    }); 

    $('input.search-artist').typeahead({ 
     name: 'Artists', 
     prefetch: '/media/json/artists.json', 
     ttl: 0, 
     limit: 10 
    }); 
}); 

UPDATE

Этот материал становится все страннее каждую минуту:

На вкладке сетевого разработчика в Chrome Инструменты Я не вижу artist.json и events.json. То же самое для FireBug в FF.

В веб-инспекторе Safari я вижу оба файла. Содержимое файла artist.json, по-видимому, сломано (при множестве пробелов где-то посередине файла, а затем продолжается с большим количеством записей). Но когда я вставляю содержимое в редактор, все записи, похоже, там.

Содержимое events.json похоже, все в порядке.

Если я добавляю запись в events.json, эта новая запись отображается в поле typeahead в Safari при сбросе Safari, но она не отображается в FF и Chrome, поэтому, вероятно, указывает на ошибку кэширования/localstorage.

Artists.json не работает во всех трех браузерах. Он выполняет автозапуск некоторых записей, но не последние добавленные (даже после сброса настроек Safari). Я действительно сходят с ума на этом ...

UPDATE 2

Когда я типа window.localStorage.clear(); в консоли в Chrome локальное хранилище будет удален. Когда я сейчас перезагружаю страницу, на вкладке сети отображаются элементы artist.json и events.json. Прогресс!Когда я добавляю элементы в оба файла, эти элементы не отображаются в поле typeahead, но добавленные элементы отображаются, если я снова очищу локальное хранилище.

ответ

0

В результате я удалил имя и свойства ttl, чтобы предотвратить его сохранение в json в локальном хранилище. Это все равно, так как файлы json обновляются каждый раз, если не ежедневно.

Но я действительно думаю, что проблема с сохранением типа headhead в localstorage по-прежнему сохраняется, поскольку файл был отключен. Я сообщу об этом по телефону typeahead.js's github.

Новый JS

$(document).ready(function() { 
    $('input.search-event').typeahead({ 
     prefetch: '/media/json/events.json', 
     limit: 10 
    }); 

    $('input.search-artist').typeahead({ 
     prefetch: '/media/json/artists.json', 
     limit: 10 
    }); 
});