从SharePoint列表加载JQuery数组,以便在文本字段上自动完成



我有一个带文本框的普通表单,ID="I7",我的利益相关者希望让客户端自动完成。我使用服务器端的数据获取来处理它,但当我尝试用值加载数组时,数组似乎会在页面加载后填充。

工作代码:

        $(document).ready(function() {
      supportScripts.actReportingSetup();
    headers = { 'Accept': 'application/json;odata=verbose', 'Content-Type': 'application/json;odata=verbose' };
        $("#I7").autocomplete ({
            source: function(request, response){
                var term = request.term;
            $.ajax({
                url: "http://portal/_api/web/lists/getByTitle('DocumentTypes')/items?$select=Title,TypeDescription&$top=500&$filter=startswith(Title,'" + term + "')",
                headers: headers,
                success: function (data) {
                    response($.map( data.d.results, function(item){
                        return{
                            label: item.Title + " - " + item.TypeDescription,
                            value: item.Title
                        }
                    }));
                }
            });
        }
    });
}); 

你们建议如何从客户端阵列运行这个?

我建议对此使用延迟承诺。它看起来像这样:

var defer = $.Deferred();
defer.done(function(){
    // code inside this block will run after your promise is resolved
});
function asyncEvent(){
    $.ajax({
        url:"http://yourUrlHere",
        headers: headers,
        success: function(data){ defer.resolve(data) },
        error: function(status){ defer.reject(status) }
    });
    return defer.promise();
});

您可以在此处找到有关jQuery延期承诺的更多信息:http://api.jquery.com/deferred.promise/

如果这不起作用,请告诉我,我会尽我所能提供帮助。

嗯,那个评论很难看。让我们试试这个格式化。这就是我最终所做的:

$.ajax({
            url: URL,
            headers: Headers,
            success: function (data) {
                $.each(data.d.results, function (i, item) {
                    docTypeArray.push(
                        {label: item.Title + " - " + item.TypeDescription,
                        value: item.Title});
                });
                goAutoComplete(docTypeArray)
            },
            error: function(jqXHR, textStatus, errorThrown){
                alert('There has been an error:n' + errorThrown);
            }
        })

        function goAutoComplete(myData){
            $("#I7").autocomplete ({
                source: myData
            });
        }

最新更新