Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jQuery Autocomplete получить из txt массив или привязка к файлу (https://javascript.ru/forum/jquery/41157-jquery-autocomplete-poluchit-iz-txt-massiv-ili-privyazka-k-fajjlu.html)

carry 02.09.2013 16:24

jQuery Autocomplete получить из txt массив или привязка к файлу
 
Посмотреть код в работе
по ссылке выше можете посмотреть все необходимое...
у меня источник данных - текстовый файл 1.txt
в нем текстовые данные представлены в таком виде:
Один
Два
Три
Четыре
и т.д.
подскажите, где нужно изменить, чтобы данные считывало из файла.... или как второй вариант - записать содержимое всего файла в массив (но там 7к записей, будет большая нагрузка на сервак)

animhotep 02.09.2013 17:23

Цитата:

Сообщение от carry
там 7к записей, будет большая нагрузка на сервак

положите записи в бд и вычитывайте оттуда

carry 02.09.2013 17:50

я не хочу лишний раз дергать бд просто
для этого я создал текстовый файлик

animhotep 02.09.2013 17:59

вычитать файл в переменную можно так
var jqxhr = $.get( "1.txt", function())
.done(function(data) { 
	//файл будет в переменной data
	
})
.fail(function( jqxhr, textStatus, error ) {
	var err = textStatus + ', ' + error;
	console.log( "Request Failed: " + err);
});

carry 02.09.2013 18:48

спасибо, сделал по аналогии, как было
что-то еще нужно поменять - так не работает

по идее нужно внести в массив данные по одному, и каждый элемент начинающийся с новой строки как новый элемент массива
у меня есть рабочий код, который берет данные прямо из текстового файла:
$(document).ready(function()
{   

     $("#file").autocomplete("autocomplete.dat", {
      autoFill:false,
      cacheLength:2,
      delay:1,
      matchCase:false,
      matchContains:false,		
      matchSubset:false,			
      minChars:2,
      mustMatch:false,
      scroll:false,
      maxItemsToShow:30
  });

но в новом коде такое вариант не канает, я не знаю где поменять (менял по аналогии и не работает)
<script language="javascript">
 var jqxhr = $.get( "1.txt", function())
.done(function(data) {
})
      jqxhr.sort();

      function monkeyPatchAutocomplete() {
      var oldFn = $.ui.autocomplete.prototype._renderItem;
          $.ui.autocomplete.prototype._renderItem = function( ul, item) {
              var re = new RegExp("^" + this.term, "i") ;
              var t = item.label.replace(re,"<span style='font-weight:bold;color:red;'>" + this.term + "</span>");
              return $( "<li></li>" )
                  .data( "item.autocomplete", item )
                  .append( "<a>" + t + "</a>" )
                  .appendTo( ul );
          };
      }
      $(document).ready(function() {
          monkeyPatchAutocomplete();
          $("#input1").autocomplete({
 
              source: function(req, responseFn) {
                  addMessage("Поск: '" + req.term);
                  var re = $.ui.autocomplete.escapeRegex(req.term);
                  var matcher = new RegExp( "^" + re, "i" );
                  var a = $.grep(jqxhr, function(item,index){
                      //addMessage("&nbsp;&nbsp;sniffing: '" + item + "'<br/>");
                      return matcher.test(item);
                  });
                  addMessage("Количество: " + a.length + " элемента(ов)");
                  responseFn( a );
              },

              select: function(value, data){
                  if (typeof data == "undefined") {
                      addMessage('Количество: ' + value);
                  }else {
                      addMessage('Вы выбрали: ' + data.item.value);
                  }
              }
          });
      });

    function addMessage(msg){
	$('#msgs').empty();
        $('#msgs').append(msg);
    }
</script>

animhotep 02.09.2013 18:53

дык тогда get не нужен, пишите
забирайте через .autocomplete("1.txt", {

carry 02.09.2013 19:00

в примере кода выше добавляю в 20-ю строку

$("#input1").autocomplete("1.txt",{

но не работает

carry 02.09.2013 19:21

все нарыл как переводить в массив
var cardRules = new Array();
    $.get('autocomplete.dat', function(data){
            cardRules = data.split('\n');
            console.log(cardRules);
        });

теперь все работает вроде

carry 02.09.2013 19:49

но, мне интересно как из файла вытянуть в моем случае
м.б. кто подскажет


Часовой пояс GMT +3, время: 10:54.