Мне нужно реализовать select2 с помощью ajax, и я использую это в качестве примера проекта для работы.
Это то, что у меня есть
Вид
<div class = "form-group">
<div class = "col-md-10">
<select class = "js-data-example-ajax form-control"></select>
</div>
</div>
$(document).ready(function () {
$('.js-data-example-ajax').select2({
placeholder: 'Enter name',
//Does the user have to enter any data before sending the ajax request
minimumInputLength: 3,
allowClear: true,
ajax: {
quietMillis: 150,
// url: '@Url.Action("GetUsers", "CRMTItems")',
url: '/CRMTItems/GetUsers/' + $('.js-data-example-ajax').text(),
dataType: 'jsonp',
results: function (data) {
console.info('results');
return { results: data.results }
}
// Additional AJAX parameters go here; see the end of this chapter for the full code of this example
}
});
)};
Контроллер
public JsonResult GetUsers(string term)
{
var users = CRMTItemViewModel.AllUsers.Where(u => u.DisplayName.Contains(term));
var userList = AttendeesToSelect2Format(users, 10);
return Json(userList, JsonRequestBehavior.AllowGet);
}
Я вижу, что поисковый запрос передается и данные фильтруются, но когда они отправляются обратно в представление, я просто вижу
Я попытался точно скопировать образец проекта, но затем столкнулся с дополнительными проблемами:
При использовании @Html.TextBoxFor вместо <select> я просто вижу
No select2/compat/inputData
в консоли js
При точном копировании js (с функцией data и results) мой поисковый запрос никогда не попадает в контроллер, и null передается каждый раз ..
Пожалуйста, может кто-нибудь помочь с этим, я не понимаю
Также проверьте вкладку Netword консоли, вы получаете данные с сервера?
@Andreas После перехода на json я теперь получаю Cannot read property 'slice' of undefined
Проверьте ответ, соответствует ли он формату, ожидаемому select2
@Andreas, похоже, это {"Total":10,"Results":[{"id":"_spocrawler_24_3595","text":"_spocrawler_24_3595"},{"id":"_spocrwl_319_15489","text":"_spocrwl_319_15489"},{"id":"sp_farm_svc_spon[email protected]","text":"sp_farm_svc_sponline"},{"id":"_spocrwl_19649","text":"_spocrwl_19649"}]}, и я думаю, что это правильно?
Results !== results@Andreas Я пробовал как data.results, так и data.Results, и я также пытался не вызывать его с помощью JSON.parse, но я всегда получаю ту же ошибку



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Как предположил Андреас в комментариях, это произошло потому, что
Results !== results
Но вместо того, чтобы менять js, мне нужно было изменить свойство Results в Select2PagedResult на results.
Я не уверен насчет jsonp, но изменение его на json, похоже, не имело никакого значения, хотя класс в коде называется JsonpResult.
JsonpResult" против public JsonResult GetUsers - либо вы ошибаетесь, либо код неверен.
@Andreas На самом деле образец кода имеет JsonpResult, который унаследован от JsonResult.
jsonp->json