2010-08-30 2 views
0

Я пришел в проект, который немного отличается от моего набора навыков (так как я сторонний разработчик), но мне все равно пришлось решать его.Использование открытого текста в качестве незавершенного источника данных 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 
        } 
       })) 
      } 
     }) 
    } 
}); 

Теперь, я посмотрел на ответ, и это возвращая результаты поиска, но ничего не отображается? Я предполагаю, что у меня есть что-то неправильное в разделе «ответ»?

ответ

0

Вы можете просто указать URL-адрес в качестве источника для автозаполнения пользовательского интерфейса jQuery. Не нужно играть с $ .ajax(), хранить значения и т. Д. Autocomplete выполняет всю работу за вас.

+0

Я пробовал это в первый раз. Что-то вроде этого: \t \t // автозаполнения \t \t \t \t $ ("# тикер") автозаполнения ({ \t \t \t источник: "/ETFSymbollookupDataHandler.ashx" \t \t}). Но данные не поступают. Какой самый простой способ отладить это с помощью Firebug? – dmackerman

+0

AutoComplete ожидает, что данные будут в формате JSON при использовании URL-адреса в качестве источника. Я не глубоко входил в ваш исходный код, но, похоже, он не возвращает json. Таким образом, вы можете использовать $ .ajax для получения данных с сервера и преобразования его в массив JS, который вы передадите автозагрузчику в качестве источника, или немного измените свой серверный код, чтобы он возвращал форматированные данные JSON. Я думаю, что второй вариант является самым простым, так как я думаю, что есть простой способ сделать это с .NET. – PJP

Смежные вопросы