JQuery Ajax Challenge - 从SharePoint 2013列表构建对象

时间:2015-09-01 13:29:52

标签: jquery ajax rest sharepoint

概述:我正在尝试根据SharePoint列表中的数据为文本框构建动态自动完成列表。

什么有效:

function GetAccounts()
   {
   var call = $.ajax({ 
   url: 
            "../_api/Web/Lists/GetByTitle('Plans')/items?$select=Title,Account&$orderby=Title asc", 
            type: "GET", 
            dataType: "json", 
            headers: { 
            Accept: "application/json;odata=verbose" 
            } 
        }); 
        call.done(function (data,textStatus, jqXHR){ 
         var table = $('#results1').dataTable({ 
                           "aaData": data.d.results, 
                           "aoColumns": [ 
                                { "mData": "Title", "sClass": "dt-center","sTitle": "Plan Name" }, 
                                { "mData": "Account","sClass": "dt-center", "sTitle": "Account",
                                "mRender": function (data, type, full) { 
                                stemp = {
                                    label: full.Title + ' (' + full.Account + ')',
                                    value: full.Account
                                }
                                    source.push(stemp);
                                    return data;
                                }
                                }       
                            ]
                        }); 


        }
        );
   }

这很棒,但我不需要数据表。如何丢失表但仍填充 stemp 对象。

提前致谢。

2 个答案:

答案 0 :(得分:1)

谢谢!这是我的工作职能:

function GetAccounts()
    {
       var call = $.ajax({ 
            url: 
            "../_api/Web/Lists/GetByTitle('Plans')/items?$select=Title,Account&$Top=3500&$orderby=Title asc", 
            type: "GET", 
            dataType: "json", 
            headers: { 
            Accept: "application/json;odata=verbose" 
            } 
        }); 
        call.done(function (data,textStatus, jqXHR){ 
            for(var i=0; i< data.d.results.length; i++){
                var result = data.d.results[i];
                var suggestion = {
                    label:  result.Title + ' (' + result.Account + ')',
                    value: result.Account
                };
                source.push(suggestion);
                }

        }
        );


    }

答案 1 :(得分:0)

我不知道你是否真的要求。但是,也许这样的事情可行。

假设您正在使用jQuery的自动完成插件,您可以尝试这一点(注意 - 代码未经测试):

$("#autoComplete").autocomplete({
    source: function(request, response){
        var term = request.term; // get what user has typed into the text box
        var call = $.ajax({
            url: "../_api/Web/Lists/GetByTitle('Plans')/items"+
               +"?$select=Title,Account&$orderby=Title asc"
               +"&filter=startswith(Title, @term) or startswith(Account, @term)&@term='"+term+"'", 
            type: "GET", 
            dataType: "json", 
            headers: { 
                Accept: "application/json;odata=verbose" 
            } 
        }); 

        call.done(function (data,textStatus, jqXHR){
            var dataToSuggest = [];
            var results = data.d.results;
            for(var i=0; i< results.length; i++){
                var result = result[i];
                var suggestion = {
                    label:  result.Title + ' (' + result.Account + ')',
                    value: result.Account
                };
                dataToSuggest.push(suggestion);
            }
            // call the response callback of the autocomplete with single value - items to be suggested
            response(dataToSuggest);  
        }
        );

    }

});

通过调用autocomplete函数,传递选项,在输入上启动插件。 选项对象有一个键source,表示自动填充将如何获得建议。

根据文档,source可以是一个函数。此函数有两个参数 - request,其中包含用户输入到输入字段的术语和response - 一个带有一个参数的回调 - 应该作为可供选择的选项呈现给用户的数据

我们提取用户提供的术语,并将其用作参数来过滤掉列表中的项目。我们通过将术语的值传递给OData查询的$filter子句来实现这一点。

当执行并完成调用时,我们使用label和值fields获取从列表返回的数据并为自动完成构建对象 - 这将允许呈现友好字符串并使用选择时帐户为值。

创建项目后,我们将其推送到数组中 - dataToSuggest。处理完所有项目后,我们可以使用我们创建的建议数组作为参数调用response回调,自动完成功能应显示选项。

正如我所说,代码未经测试,可能需要进行一些调整,但我希望它能帮助您入门。我使用Autocomplete jQueryUI插件文档作为源代码。

jQueryUI Autocomplete plugin documentation