Проблема с заголовком типа — Ajax возвращает данные Json только один раз

#javascript #jquery #ajax #json #typeahead

#javascript #jquery #ajax #json #typeahead

Вопрос:

Я несколько часов рвал на себе волосы с помощью плагина Typeahead от Twitter.

По сути, мы извлекаем данные из веб-службы (веб-сервиса Asmx) с форматом ответа .JSON.

Как только мы получим его через BloodHound, мы преобразуем его в строку, вычеркиваем некоторые дополнительные символы, прежде чем повторно преобразовать его в Json, а затем передать его в Typeahead.

  var engine= new Bloodhound({
        datumTokenizer: function (d) {
            return Bloodhound.tokenizers.whitespace("value")
        },
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        prefetch : {
            ttl : 1000,
            url : '/webservice.asmx'
        },
        remote: {
            ttl : 1000,
            url: '/webservice.asmx',
            ajax: {
                beforeSend: function (jqXhr, settings) {
                    jqXhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
                    settings.data = '{"query":"'   $('#inputText').val()   '"}';
                    alert(settings.data);
                },
                type: "POST",
                context: this
            },
            filter: function (response) {
                //return response;
                if (response.hasOwnProperty('d')) {

                    var returned = String(response.d);
                    returned = returned.slice(14,-1);

    var parsedJSON =     jQuery.parseJSON(returned);
                    return  parsedJSON ;
                }
                else {
                    return response;
                }
            }
        }
    });

    engine.initialize();

    $('#inputText').typeahead(null, {
        source: engine.ttAdapter()
    });
 

При вводе в поле ввода код извлекает данные на основе запроса через Ajax ОДИН и ТОЛЬКО ОДИН РАЗ, однако он пропускает их через фильтр несколько раз, когда пользователь вводит больше символов в поле ввода. Я считаю, что это проблема. Поскольку мы должны использовать тип POST из-за метода использования веб-сервиса Asmx, Ajax, похоже, не может выполнить более одного запроса, независимо от того, сколько символов мы вводим в поле ввода.

Как я уже сказал, это сводит нас с ума уже несколько дней, поэтому любая помощь будет невероятно признательна.

Ответ №1:

Этот блог помог решить ответ — http://www.weezey.com/2014/03/bringing-it-all-together /

Похоже, мы немного усложнили ситуацию. Нам все равно пришлось удалить и повторно преобразовать Json, который наш веб-сервер выдавал обратно в разделе Ajax, но мы заставили его работать.