I have 2 lists in my Sharepoint : speeches and schools.
In my speeches form, I have a school field. I want to autocomplete this field with values (name, adress, city) from schools list.
Here's my code :
$(School_fieldID).autocomplete({
    minLength: 2,
    source: function (request, response) {
        var term = request.term.replace(/ /g, "*\",\"*");
        var searchUrl = _spPageContextInfo.webAbsoluteUrl + "/_api/search/query?querytext='and(\"*" + term + "*\",path:\"" + _spPageContextInfo.webAbsoluteUrl + "/Lists/Schools\")'&enablefql=true";
        var executor = new SP.RequestExecutor(_spPageContextInfo.webAbsoluteUrl);
        executor.executeAsync({
            url: searchUrl,
            method: "GET",
            headers: { "Accept": "application/json; odata=verbose" },
            success: function (data) {
                var jsonObject = JSON.parse(data.body);
                var results = jsonObject.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results;
                var clientContext = new SP.ClientContext();
                var schoolList = clientContext.get_web().get_lists().getByTitle('Schools');
                response($.map(results, function (result) {
                    school = schoolList.getItemById(result.Cells.results[6].Value.split('=').pop());
                    clientContext.load(school, 'Title', 'Adress', 'City');
                    clientContext.executeQueryAsync(Function.createDelegate(this, function (schoolName, schoolAdress, schoolCity) {
                        schoolName = school.get_item('Title');
                        schoolAdress = school.get_item('Adress');
                        schoolCity = school.get_item('City');
                    }), Function.createDelegate(this, function (sender, args) {
                        alert('Error occured: ' + args.get_message());
                    }));
                    return {
                        label: schoolName + " (" + schoolAdress + " " + /*schoolCity + */ ")",
                        value: schoolName
                    };
                }));
            }
        });
    }
});
When I test this code, schoolName, schoolAdress et schoolCity are undefined because of asynchronous function executeQueryAsync.
So I think solution is in Promise or Callback, but I tried different solutions for a week, without success :-(
Please note I read carefully this post How do I return the response from an asynchronous call?, but can't find a good solution anyway...
Can anyone help me ?
Thanks in advance,
Florent
 
    