2014-11-14 2 views
1

В моем сценарии для автозаполнения я установил JSon файл:Jquery автозаполнения из JSon списка все элементы

SCRIPT

<script type="text/javascript"> 
    $("#tags").autocomplete({ 
    source: function(request, response) { 
     $.ajax({ 
     url: "test.json", 
     dataType: "json", 
     data: { term: request.term }, 
     success: function(data) { 
      response($.map(data, function(item) { 
      return { label: item.name_test }; 
      })); 
     } 
     }); 
    } 
    }); 
</script> 

HTML

<div class="ui-widget"> 
    <label for="tags">Tags: </label> 
    <input id="tags"> 
</div> 

JSON файл

[{ 
    "id_test": "7", 
    "name_test": "Tejido", 
    "price": "65" 
}, { 
    "id_test": "8", 
    "name_test": "Semen", 
    "price": "120" 
}, { 
    "id_test": "6", 
    "name_test": "Saliva", 
    "price": "20" 
}, { 
    "id_test": "2", 
    "name_test": "Analisis urinario", 
    "price": "150" 
}, { 
    "id_test": "3", 
    "name_test": "Analisis sanguineo", 
    "price": "1502" 
}, { 
    "id_test": "4", 
    "name_test": "Analisis fecal", 
    "price": "20" 
}] 

Но когда я ввожу имя во вход, все элементы перечислены.

Какая у меня ошибка?

+0

Вы фильтруете результаты на сервере? Потому что ты должен быть. –

+0

не фильтрует, я знаю, что это цель автозаполнения, перечислить элементы с теми же словами или похожими –

ответ

0

При использовании удаленного источника, так как ваш код с помощью , вам необходимо отфильтровать результаты на стороне сервера или в обратном вызове success из вызова ajax. В вашем случае вы можете использовать что-то вроде:

... 
success: function (data) { 
    var tag_val = $("#tags").val(); 
    response($.map(data, function (item) { 

     //filtering results.... 
     if (item.name_test.indexOf(tag_val) != -1) { 
      return { 
       label: item.name_test 
      }; 
     } 
    })); 
} 
+0

спасибо, что это работает! –

+0

@Samueledrei приветствую вас. Просто указывая, что это не лучший подход, потому что вы всегда получаете весь json для фильтрации некоторых результатов. Лучше всего было бы фильтровать на стороне сервера или не использовать удаленный источник – Victor

0

Когда параметр URL используется, автозаполнение плагин будет отображать все предложения, возвращаемые сервером без фильтрации (она принимает это ответственность сервера, чтобы вернуть предложения, которые соответствуют параметру ?term=xyz).

Если файл JSON статический файл, вы должны загрузить его на странице загрузки, процесса и использовать его в качестве source параметра:

var source = ["Hold them horses!"]; 
$.ajax({ 
    url: "test.json", 
    dataType: "json", 
    success: function(data) { 
     source = $.map(data, funciton(item) { 
      return { 
       label: item.name_test, 
       value: item.name_test 
      }; 
     }); 
    } 
}); 
$("#tags").autocomplete({ 
    source: source 
}); 
Смежные вопросы