Я пришел в проект, который немного отличается от моего набора навыков (так как я сторонний разработчик), но мне все равно пришлось решать его.Использование открытого текста в качестве незавершенного источника данных jQuery UI?
В основном, что я пытаюсь сделать, это интегрировать автозаполнение jQuery UI с набором данных, который является простым текстом. Вот файл «обработчик», который захватывает данные:
<%@ WebHandler Language="C#" Class="ETFSymbollookupDataHandler" %>
using System;
using System.Web;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
public class ETFSymbollookupDataHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string type = context.Request.QueryString["type"];
string srch = context.Request.QueryString["srch"];
if (type == null)
type = "a";
if (srch == null)
srch = "";
context.Response.ContentType = "text/plain";
string connString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["Ektron.DbConnection"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
SqlCommand cmd = new SqlCommand("uspGetStockAutocomplete", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter prmSymbol = cmd.Parameters.Add("@SearchFor", SqlDbType.VarChar);
prmSymbol.Direction = ParameterDirection.Input;
prmSymbol.Size = 50;
prmSymbol.IsNullable = true;
prmSymbol.Value = (type == null ? (object)DBNull.Value : type);
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (reader.Read())
{
string symbol = reader["symbol"].ToString();
string name = reader["name"].ToString();
context.Response.Write(symbol + ": " + name + "\n");
}
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
Я понял, что эта страница имеет «тип» строки запроса, а затем возвращает список данных. Я играл с чем-то вроде:
$.ajax({
url: "/ETFSymbollookupDataHandler.ashx",
data: {
type: "DELL"
},
success: function(ticker){
alert(ticker);
}
});
И что делает возвращают ожидаемые результаты ... но я просто не знаю, как заставить их заполнить в раскрывающемся списке автозаполнения. Виджет автозаполнения имеет «исходный» параметр ... мне нужно каким-то образом сохранить результат в переменной?
UPDATE:
Я получил немного дальше, адаптируя один из примеров веб-сайта jQueryUI на мой вкус:
$("#ticker").autocomplete({
source: function(request, response) {
$.ajax({
url: "ETFSymbollookupDataHandler.ashx",
data: {
type: request.term
},
success: function(data) {
response($.map(data.type, function(item) {
return {
label: item.symbol,
value: item.symbol
}
}))
}
})
}
});
Теперь, я посмотрел на ответ, и это возвращая результаты поиска, но ничего не отображается? Я предполагаю, что у меня есть что-то неправильное в разделе «ответ»?
Я пробовал это в первый раз. Что-то вроде этого: \t \t // автозаполнения \t \t \t \t $ ("# тикер") автозаполнения ({ \t \t \t источник: "/ETFSymbollookupDataHandler.ashx" \t \t}). Но данные не поступают. Какой самый простой способ отладить это с помощью Firebug? – dmackerman
AutoComplete ожидает, что данные будут в формате JSON при использовании URL-адреса в качестве источника. Я не глубоко входил в ваш исходный код, но, похоже, он не возвращает json. Таким образом, вы можете использовать $ .ajax для получения данных с сервера и преобразования его в массив JS, который вы передадите автозагрузчику в качестве источника, или немного измените свой серверный код, чтобы он возвращал форматированные данные JSON. Я думаю, что второй вариант является самым простым, так как я думаю, что есть простой способ сделать это с .NET. – PJP