2012-04-25 2 views
3

Я просто получаю странную ошибку при использовании этих двух инструментов. Я делаю запрос AJAX к API, а затем извлекаю данные JSON, которые хранятся в localStorage и отображаются на панели автозаполнения. Проблема в том, что в зависимости от происхождения источника автозаполнения панель будет реагировать по-разному.Autocomplete (jQuery UI) и localstorage

Вот функция обратного вызова называется на успех AJAX:

function _company_names(data) 
{ 
    localStorage.setItem('ac_source', JSON.parse(data).Result); 

    // Works fine 
    $("#search_input").autocomplete("option", "source", JSON.parse(data).Result); 
    // Send an AJAX request 
    $("#search_input").autocomplete("option", "source", localStorage.getItem('ac_source')); 
} 

Если я прохожу JSON.parse (данные) .Result в результате к источнику автозаполнения, это будет хорошо. Однако, если я передаю localStorage.getItem («ac_source»), виджет переменного тока отправит запрос AJAX (не используя мою собственную функцию), дующий на ветру (мой node.js попытается разобрать его и т. Д.).

Я использую localstorage для доступа к этим данным из другой части моего кода (сохраните его, чтобы сравнить его с другими исследованиями пользователей и отображать его, если запрос одинаков).

+1

Что возвращаемый тип GetItem - строка? Вам нужно JSON.parse, что тоже, прежде чем вы сможете его использовать? Похоже, автозаполнение интерпретирует строку в качестве URL-адреса для запроса. – Rup

+0

Вы были правы, это был вопрос синтаксического анализа. Я исправил это, воздействуя на данные в локальном хранилище, затем проанализировал его в исходном автозаполнении: \t localStorage.setItem ('ac_source', raw_data); \t $ ("# search_input"). Autocomplete ("option", "source", JSON.parse (localStorage.getItem ('ac_source')). Результат); – Simon

ответ

2

можно хранить только строковые данные в локальном хранилище:

localStorage.setItem('ac_source', '{"key":"data","key1":"data1"}'); 

$("#search_input").autocomplete("option", "source", JSON.parse(localStorage.getItem('ac_source')).Result);