0

我们如何使用无限滚动进行自动完成组合?我找到了一个带有无限滚动的自动完成 jquery ui,但是这个自动完成通过 pagemethods 获取数据。但我想在 mvc 应用程序中使用它,并想使用控制器的操作来检索数据。要通过 pagemethods 使用此自动完成功能,应该这样做:

$(document).ready(function () {
        //Input for testing purposes
        $("#inp").smartautocomplete({
            getDataFunc: getData,
            pageSize: 15,
            autoFocus: true
        });
    });

    //Function the SA plugin called when data is needed. 
    var getData = function (input, pageIndex, pageSize, callback) {

        PageMethods.GetData(input, pageIndex, pageSize, function (response) {
            if (response) {
                response = $.map(response, function (item) {
                    return {
                        label: item,
                        value: item
                    }
                });
                callback(response);
            }
            else callback();
        });
    };

但我改变了使用 $.ajax 获取数据的方式:

var getData = function (input, pageIndex, pageSize, callback) {
        $.getJSON(
            { url: '@Url.Action("GetData", "Home")' },
            { input: input, pageIndex: pageIndex, pageSize: pageSize },
            function (response) {
            if (response) {
                response = $.map(response, function (item) {
                    return {
                        label: item,
                        value: item
                    };
                });
                callback(response);
            }
            else callback();
        });

    };

但它不起作用,并且没有调用该动作。此自动完成功能可在此处访问: http: //www.codeproject.com/Articles/325719/JQueryUI-smartAutocomplete? fid=1683905

我想知道是否有任何其他解决方案可以通过无限滚动自动完成

4

1 回答 1

1

用 AJAX 调用替换 PageMethod 调用

        $.ajax({
            url: '@Url.Action("GetData", "Default")',                
            type: 'GET',
            dataType: 'json',
            data: {
                input: input,
                pageIndex: pageIndex,
                pageSize: pageSize

            },

            success: function (response) {
                //alert(response);
                if (response) {
                    response = $.map(response, function (item) {
                        return { label: item, value: item };
                    });
                    callback(response);
                } else {
                    callback();
                }
            },
            error: function (e) {
                alert('error' + e);
            },
            contentType: 'application/json; charset=utf-8'


        });

确保您的控制器操作返回 JSONResult

return new JsonResult {JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data =    data };//new {result = data}

希望这可以帮助。

于 2013-10-09T00:24:59.987 回答