jQuery select2 с удаленными данными и asp.net

Я использую библиотеку select2 для замены полей выбора. Я изменил пример 7, который вы можете найти на странице библиотеки Select2 (прокрутите вниз с идентификатором $("#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

person janilemy    schedule 12.02.2013    source источник
comment
Вы сериализуете JavaScript, что дает вам ответ в формате json. Тем не менее, в вызове ajax вы указали тип данных jsonp. Измените его на json, и он должен работать, если у вас нет других проблем.   -  person DarrellNorton    schedule 11.08.2014


Ответы (1)


Этот вопрос довольно старый, поэтому почти уверен, что у вас есть решение ... но:

Удалите все эти функции:

formatResult: movieFormatResult formatSelection: movieFormatSelection dropdownCssClass: ... escapeMarkup: ....

Вы не предоставляли эти функции для форматирования данных? Все это необходимо только в том случае, если вы создаете настраиваемый выпадающий список элементов.

Вы возвращаете data.recipes - это должен быть массив {Text: "", Id: ""}, или вам нужно построить его из того, что вы возвращаете прямо здесь.

Во-первых, заставьте его работать с очень простым списком с очень простыми данными ... затем продолжайте.

Кроме того, когда вы получите эту работу, попробуйте использовать WebApi или ServiceStack для обработки ваших данных вместо IHttpHandler.

person Wayne Brantley    schedule 04.05.2013