jQuery select2 с удаленными данными и asp.net
Я использую библиотеку select2 для замены блоков выбора. Я переставил пример 7, который вы можете найти на странице библиотеки Select2 (прокрутите вниз с помощью id $("#e7").select2
так далее...). Я сделал свой собственный универсальный обработчик, который возвращает сериализованные данные JSON:
Представление GetData.asxh: открытый класс GetData: IHttpHandler { public bool IsReusable { get { return false; } }
public class RecipesList
{
public int total { get; set; }
public List<TopRecipeTable> recipes { get; set; }
public RecipesList() { }
public RecipesList(int total, List<TopRecipeTable> recipes)
{
this.total = total;
this.recipes = recipes;
}
}
private string GenerateJsonSerializedObject(int languageId, string orderBy)
{
RecipesList recipeList = new RecipesList(15, DBDataBase.GetTopRecipesByNumberOfRecipes(languageId, 15));
return new JavaScriptSerializer().Serialize(recipeList);
}
public void ProcessRequest(HttpContext context)
{
int languageId;
bool languageParsed = int.TryParse(context.Request["languageId"], out languageId);
string orderBy = (string)context.Request["orderBy"];
if (languageParsed && orderBy != string.Empty)
{enter code here
context.Response.ContentType = "application/json";
var jsonValue = GenerateJsonSerializedObject(languageId, orderBy);
context.Response.Write(jsonValue);
}
}
Этот универсальный обработчик возвращает правильный формат json (я проверил его по этому URL). Мой результат (json) также такой же, как в примере на вышеупомянутой странице. Но после этого jquery больше не срабатывает.
Мой сценарий:
$(document).ready(function () {
$("#e8").select2({
placeholder: "Search for a recipe",
//minimumInputLength: 1,
ajax: {
url: "/Handlers/GetData.ashx",
dataType: 'jsonp',
data: function (term, page) {
return {
languageId: 1,
orderBy: "TA"
};
},
results: function (data, page) {
alert(data.total);
var more = (page * 10) < data.total; // whether or not there are more results available
// notice we return the value of more so Select2 knows if more results can be loaded
return { results: data.recipes, more: more };
}
},
formatResult: movieFormatResult, // omitted for brevity, see the source of this page
formatSelection: movieFormatSelection, // omitted for brevity, see the source of this page
dropdownCssClass: "bigdrop", // apply css that makes the dropdown taller
escapeMarkup: function (m) { return m; } // we do not want to escape markup since we are displaying html in results
});
});
Я пытался написать то же самое alert(data.total)
в оригинальном примере, и это сработало, но не в моей версии. Итак, у меня правильный формат json, jquery вызывает мой универсальный обработчик, а также получает параметры languageId... и также возвращает правильный формат json, но ничего. Я не знаю, пропускаю ли я что-то здесь, потому что я уверен, что эта вещь также может работать с универсальным обработчиком. Я надеюсь, что дал достаточно информации о моей проблеме.
I can also add my result in jquery .ajax error handler :
xhr.status = 200
ajaxOptions = parsererror
horwnError = SyntaxError : invalid label
If this is any helpful information
1 ответ
Этот вопрос довольно старый, так что почти наверняка у вас уже есть решение... но:
Удалите все эти функции:
formatResult: movieFormatResult formatSelection: movieFormatSelection dropdownCssClass: ... escapeMarkup:....
Вы не предоставили эти функции для форматирования ваших данных? Все это необходимо только в том случае, если вы делаете пользовательский выпадающий список предметов.
Вы возвращаете data.recipes - это должен быть массив {Text:"", Id:""} или вам нужно создать его из того, что вы вернете прямо туда.
Во-первых, настройте его на работу с очень простым списком с очень базовыми данными... затем перейдите оттуда.
Кроме того, когда вы начнете работать, попробуйте использовать WebApi или ServiceStack для обработки ваших данных вместо IHttpHandler.