2016-05-17 5 views
0

Я попытался использовать плагин Select 2 с ajax в качестве источника данных, но всегда получаю «Результаты не найдены» в списке результатов после ввода нескольких букв. Я ожидал, что он перечислит все найденные предметы (Field: LastName) из моего ответа Ajax в моих результатах поиска. Я приложил ответ ajax в конце этого сообщения.Запрос Ajax Select2 - Список результатов всегда пуст

Мой HTML выберите элемент:

<select class="player-select form-control"> 
</select> 

Мои Выбор2 JS:

jQuery(document).ready(function() { 
    $(".player-select").select2({ 
     ajax: { 
      url: "/database/players.php", 
      dataType: "json", 
      delay: 250, 
      processResults: function (data) { 
       // parse the results into the format expected by Select2. 
       // since we are using custom formatting functions we do not need to 
       // alter the remote JSON data 
       return { 
        results: data.LastName 
       }; 
      } 
     }, 
     minimumInputLength: 1, 
    }) 
}); 

Мой AJAX Ответ:

[ 
    { 
     "Id":"27", 
     "FirstName":"Joe", 
     "LastName":"Cole", 
     "CommonName":null, 
     "Rating":"72", 
     "Position":"14", 
     "LastPriceUpdate":"0000-00-00 00:00:00" 
    }, 
    { 
     "Id":"34079", 
     "FirstName":"Ashley", 
     "LastName":"Cole", 
     "CommonName":null, 
     "Rating":"77", 
     "Position":"14", 
     "LastPriceUpdate":"0000-00-00 00:00:00" 
    }, 
    { 
     "Id":"146545", 
     "FirstName":"David", 
     "LastName":"C\u00f3rcoles Alcaraz", 
     "CommonName":"C\u00f3rcoles", 
     "Rating":"66", 
     "Position":"45", 
     "LastPriceUpdate":"0000-00-00 00:00:00" 
    }, 
    { 
     "Id":"171565", 
     "FirstName":"Miguel", 
     "LastName":"Linares C\u00f3lera", 
     "CommonName":"Linares", 
     "Rating":"69", 
     "Position":"45", 
     "LastPriceUpdate":"0000-00-00 00:00:00" 
    }, 
    { 
     "Id":"180216", 
     "FirstName":"S\u00e9amus", 
     "LastName":"Coleman", 
     "CommonName":null, 
     "Rating":"81", 
     "Position":"25", 
     "LastPriceUpdate":"0000-00-00 00:00:00" 
    }, 
    { 
     "Id":"189884", 
     "FirstName":"Shannon", 
     "LastName":"Cole", 
     "CommonName":null, 
     "Rating":"63", 
     "Position":"195", 
     "LastPriceUpdate":"0000-00-00 00:00:00" 
    }, 
    { 
     "Id":"198199", 
     "FirstName":"Pablo", 
     "LastName":"Alcolea Guerrero", 
     "CommonName":"Alcolea", 
     "Rating":"63", 
     "Position":"45", 
     "LastPriceUpdate":"0000-00-00 00:00:00" 
    }, 
    { 
     "Id":"203268", 
     "FirstName":"Larnell", 
     "LastName":"Cole", 
     "CommonName":null, 
     "Rating":"63", 
     "Position":"14", 
     "LastPriceUpdate":"0000-00-00 00:00:00" 
    }, 
    { 
     "Id":"219795", 
     "FirstName":"Joel", 
     "LastName":"Coleman", 
     "CommonName":null, 
     "Rating":"56", 
     "Position":"14", 
     "LastPriceUpdate":"0000-00-00 00:00:00" 
    } 
] 

ответ

1

Ваш метод processResults будет немного отличаться, поскольку вы пытаетесь получить пользовательский результат, соответствующий LastName для каждого элемента. Я добавил комментарии, чтобы вы знали, что нужно делать.

processResults: function(data, params) { 
    var resData = [];//just to store matching data 
    //iterate through each data 
    data.forEach(function(value) { 
    //check if the LastName param contains the search param entered 
    if (value.LastName.indexOf(params.term) != -1) 
     resData.push(value)//push the item to resData array 
    }) 
    return { 
    results: $.map(resData, function(item) { 
     //now while returning you need to map the array text and id property since you are 
     //returning custom query 
     return { 
     text: item.LastName, 
     id: item.Id 
     } 
    }) 
    }; 
}, 

A Full Demo Here

Смежные вопросы