У меня есть сайт ASP.NET, на котором я реализовал функцию автозаполнения / мгновенного поиска для поиска имен пользователей. У меня есть страница SearchResults.aspx, которая по сути отображает список пользователей JSON, соответствующих переданной ей строке запроса "поисковый запрос". JSON извлекается из Azure Active Directory с помощью функции AWS Lambda.
Это загрузка страницы;
protected void Page_Load(object sender, EventArgs e)
{
if (!Request.IsAuthenticated)
{
HttpContext.Current.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties { RedirectUri = "/" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
List<Users> Results = GetADUsers(Request.QueryString["term"]);
Response.ContentType = "application/json;charset=UTF-8";
var output = (from r in Results
select new { label = r.Name}).ToList();
// Then we need to convert it to a JSON string
JavaScriptSerializer Serializer = new JavaScriptSerializer();
string JSON = Serializer.Serialize(output);
// And finally write the result to the client.
Response.Write(JSON);
}
И это функция для получения пользователей:
List<Users> GetADUsers(string searchParameter)
{
List<Users> ret = new List<Users>();
try
{
using (var client = new AmazonLambdaClient(Amazon.RegionEndpoint.APSoutheast2))
{
var request = new InvokeRequest
{
FunctionName = ConfigurationManager.AppSettings["lambdaArnPrefix"] + "lambda-wlyw-GetAzureAdUsers",
Payload = "\"" + searchParameter + "\"",
InvocationType = InvocationType.RequestResponse
};
var response = client.Invoke(request);
string result;
using (var sr = new StreamReader(response.Payload))
{
result = sr.ReadToEnd();
}
dynamic _userList = JsonConvert.DeserializeObject(result);
for (int i = 0; i < _userList.Count; i++)
{
ret.Add(
new Users
{
Name = _userList[i].userName
});
}
}
}
catch (Exception ex)
{
ret.Add(new Users() { Name = ex.Message });
}
return ret;
}
Затем у меня есть моя главная страница, на которой есть поле поиска, которое в основном использует контент со страницы SearchResults.aspx для заполнения результатов на основе того, что введено в поле поиска (почти как использование SearchResults.aspx как веб-сервис) .
<script>
$(function() {
$( "#tags" ).autocomplete({ source: "/SearchResults.aspx" });
});
</script>
Вышеупомянутый javascript ссылается на этот ввод:
<div class = "ui-widget">
<input id = "tags" runat = "server"/>
</div>
И использует доступный здесь javascript автозаполнения - http://leaverou.github.io/awesomplete (который я не делал, я просто использую).
Эта функция AWS Lambda при тестировании работает нормально. Страница SearchResults.aspx отлично работает при тестировании в браузере. Однако после перехода с HTTP на HTTPS текстовое поле, в котором ввод должен запускать весь этот процесс, перестал работать. Не понимаю почему. Может быть, переход от HTTP к HTTPS - отвлекающий маневр? Но это единственное изменение, которое я сделал? Кто-нибудь может придумать причину, по которой это больше не работает?
Я исправил эту ошибку «VoteWho: 1 смешанный контент: страница« wlyw.cloudy-skies.org/VoteWho »была загружена по HTTPS, но запросила небезопасный скрипт« code.jquery.com/ui/1.9.1/jquery-ui.js ». Этот запрос был заблокирован; контент должен обслуживаться по HTTPS». вместо этого ссылаясь на URL-адрес HTTPS, ошибка больше не возникает, но автозаполнение по-прежнему не работает?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я почти ничего не знаю о JavaScript, но я пробовал использовать отладчик Firebug JS? И я мог отметить одну вещь: скрипт awesomeplete.js не отображается в списке загруженных скриптов, когда я нахожусь на странице .aspx, содержащей поле поиска? У него есть другие сценарии * .js, которые являются частью среды начальной загрузки. Понятия не имею, имеет это значение или нет.