#asp.net #ajax #json #jquery-ui #jquery-ui-autocomplete
#asp.net #ajax #json #jquery-ui #jquery-ui-autocomplete
Вопрос:
Я пытаюсь использовать функцию автозаполнения пользовательского интерфейса jQuery в своем веб-приложении. Я настроил страницу под названием SearchPreload.aspx. На этой странице проверяется, не вводится ли значение (term) вместе с другим параметром. Страница проверяет входящие значения, а затем извлекает некоторые данные из базы данных и распечатывает массив javascript (например: ["item1","item2"]
) на странице. Код:
protected void Page_Load(object sender, EventArgs e)
{
string curVal;
string type ="";
if (Request.QueryString["term"] != null)
{
curVal = Request.QueryString["term"].ToString();
curVal = curVal.ToLower();
if (Request.QueryString["Type"] != null)
type = Request.QueryString["Type"].ToString();
SwitchType(type,curVal);
}
}
public string PreLoadStrings(List<string> PreLoadValues, string curVal)
{
StringBuilder sb = new StringBuilder();
if (PreLoadValues.Any())
{
sb.Append("["");
foreach (string str in PreLoadValues)
{
if (!string.IsNullOrEmpty(str))
{
if (str.ToLower().Contains(curVal))
sb.Append(str).Append("","");
}
}
sb.Append(""];");
Response.Write(sb.ToString());
return sb.ToString();
}
}
Часть базы данных работает нормально и выводит правильные данные на экран страницы, если я перейду к ней через браузер.
Автозаполнение пользовательского интерфейса jQuery записывается следующим образом:
$(".searchBox").autocomplete({
source: "SearchPreload.aspx?Type=rbChoice",
minLength: 1
});
Теперь, если я правильно понимаю, каждый раз, когда я набираю в поле поиска, это должно действовать как нажатие клавиши и запускать мой источник, чтобы ограничить данные, правильно? Когда я выполняю инструкцию debug в коде SearchPreload.aspx, кажется, что страница вообще не отображается.
Если я оберну функцию автозаполнения в функцию .keypress, то я попаду на страницу предварительной загрузки поиска, но все равно не получу никаких результатов. Я просто хочу показать результаты в окне поиска точно так же, как пример функциональности по умолчанию на веб-сайте jQuery. Что я делаю не так?
Комментарии:
1. Вы пробовали запускать это в Firefox с firebug? Таким образом, вы можете видеть, какие методы ajax вызываются, а также коды результатов и ответ.
2. к сожалению, мы не можем установить ошибку fire при этой установке…
3. Читая страницу плагина, похоже, что вам нужно вернуть массив json, а не массив javascript. Попробуйте изменить [и] на {и}.
4. Вот как выглядит результат, полученный по URL демонстрационной страницы: jqueryui.com/demos/autocomplete/search.php?term=bla
5. Я обновил свой код, чтобы отобразить страницу в том же формате, что и search.php страница и безрезультатно, она по-прежнему не работает.
Ответ №1:
автозаполнение не отобразит предложения, если JSON, возвращаемый сервером, недействителен. Поэтому скопируйте следующий URL (или возвращенные данные JSON) и вставьте его в JSONLint. Проверьте, действителен ли ваш JSON.
http://yourwebsite.com/path/to/Searchpreload.aspx?Type=rbChoiceamp;term=Something
PS: Я не вижу, что вы вызываете PreLoadStrings
функцию. Я надеюсь, что это нормально.
Комментарии:
1. Отличный ресурс, мой JSON был недействительным из-за лишней запятой. Большое спасибо!
Ответ №2:
Нужно проверить пару вещей.
-
Убедитесь, что путь к странице указан правильно. Если вы находитесь в http://mysite.com/subfolder/PageWithAutoComplete.aspx , и ваша страница searchpreload.aspx находится в другом каталоге, таком какhttp://mysite.com/anotherFolder/searchpreload.aspx url, который вы используете в качестве источника, будет неправильным, он должен быть
источник: «/AnotherFolder/Searchpreload.aspx?Type=rbChoice»
-
Еще одна вещь, которую вы могли бы попробовать, это сделать метод, который вы вызываете, методом страницы на странице searchpreload.aspx. Обычно при работе с javascript я пытаюсь использовать методы страницы для обработки запросов ajax и отправки обратно полученных данных. Больше методов на странице можно найти здесь: http://www.singingeels.com/Articles/Using_Page_Methods_in_ASPNET_AJAX.aspx
HTH.
Комментарии:
1. Я попытался жестко закодировать URL-адрес в исходном коде, и, похоже, он по-прежнему не обеспечивает корректный доступ к странице. Единственный способ заставить это работать — это жестко закодировать значения в массив на javascript, но мне нужно, чтобы это было динамическим на основе отправленного значения и дополнительного параметра.