我有一个带有文本框的普通表格,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
}
}));
}
});
}
});
});
你们有什么建议让这个从客户端阵列运行?
答案 0 :(得分:0)
我建议使用延期承诺。它看起来像这样:
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/
如果这不起作用,请告诉我,我会尽力帮助。
答案 1 :(得分:0)
那个评论很丑陋。我们试试这个格式化。这就是我最终做的事情:
$.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
});
}