2012-01-16 3 views
3

У меня есть текстовое поле, Внутри я хочу, чтобы он был завершен. Данные для автозаполнения будут переданы через базу данных.Автозаполнение jquery не работает?

Это мой Jquery:

var data = "autocompletetagdata.aspx" 
    $("#item").autocomplete({ 
     source: data 
    }); 

Это то, что я поставил в autocompletetagdata сейчас:

protected void Page_Load(object sender, EventArgs e) 
{ 
    string term = Request.QueryString["term"]; 
    SqlConnection myConnection = new SqlConnection(connStr); 
    myConnection.Open(); 
    string SQL = ("select Top 10 LTRIM(RTRIM(PGPRDC)) As PGPRDC FROM SROPRG SROPRG"); 
    SqlCommand myCommand = new SqlCommand(SQL, myConnection); 
    StringBuilder sb = new StringBuilder(); 
    try 
     { 
     SqlDataReader reader = myCommand.ExecuteReader(); 
     if (reader.HasRows) 
     { 
      while (reader.Read()) 
      { 
      sb.Append(reader.GetString(0)) 
          .Append(Environment.NewLine); 
      } 
     } 
     reader.Close(); 
     } 
    catch (Exception ex) 
    { 
     myConnection.Close(); 
    } 
    myConnection.Close(); 
     Response.Write(sb.ToString()); 
//return "['word', 'hello', 'work', 'oi', 'hey']";  
    } 

Что я делаю неправильно?

EDIT:

<script type="text/javascript" src="/scripts/js/jquery.scrollTo-min.js"></script> 
<script type="text/javascript" src="/scripts/js/jquery.flash.min.js"></script> 
<script type="text/javascript" src="/scripts/js/jquery.sifr.min.js"></script> 
<script type="text/javascript" src="/scripts/js/global.js"></script> 
<script type="text/javascript" src="/scripts/js/jquery-ui-1.8.17.custom.min.js"></script> 
<script type="text/javascript" src="/scripts/js/orderstatus.js"></script>  
<script type="text/javascript" src="/scripts/js/jquery.ui.core.js"></script> 
<script type="text/javascript" src="/scripts/js/jquery.ui.widget.js"></script> 
<script type="text/javascript" src="/scripts/js/jquery.ui.datepicker.js"></script> 
<script type="text/javascript" src="/scripts/js/jquery.qtip-1.0.0-rc3.min.js"></script> 
<script type="text/javascript" src="/scripts/js/json_parse.js"></script> 

Когда вы идете в autocompletetagdata..aspx в браузере вы вернетесь на экран ...

SC052 SC053 SC055 SC060 SC061 SC062 SC063 SG011 SG014 SG015 

Firebug также делает показать эти пункты будут отправлены обратно в ответ, но ничего не происходит с текстовым полем

+0

autocompletetagdata.aspx должен возвращать JSON-кодированные данные, например. '['SC052', 'SC053']' и т. Д. Это то, что ожидает автозаполнение jQuery-ui. –

ответ

0

Это Jquery код:

$("#txt1").autocomplete({ 
    source: function (request, response){ 
     $.ajax({ 
      type: "POST",       
      url: "YourAddress",   
      contentType: "application/json; charset=utf-8", 
      dataType: "json",              
      success: function (data) { 
      response($.map(data.d, function (item) { 
       return { 
        id: item.Value, 
        value: item.Text 
       } 
      })) 
     } 
     }); 
    }, 
    select: function (event, ui) { 
     $("#hdnId").val(ui.item.id);//Put Id in a hidden field 
    } 
}); 

позвоню Ajax запрос и вернуть то, что данные JSON как это:

[{"Value":val1,"Text":"text1"}, 
{"Value":val2,"Text":"text2"}] 

для возвращения Somthing как, что вы должны определить класс, как это:

public class Autocomplete 
{ 

    private int val; 
    private string text; 

    public int Value 
    { 
     get 
     { 
      return val; 
     } 
     set 
     { 

      val = value; 
     } 
    } 

    public string Text 
    { 
     get 
     { 
      return text; 
     } 
     set 
     { 

      text = value; 
     } 
    } 
} 

так что этого достаточно, чтобы вернуть список объектов этого класса (List<Autocomplete>) .so создать этот список и заполнить его вашим SqlCommand, а затем вернуть его в качестве ответа вашего XMLHTTPRequest

Я проверил it.It работы великого человека

Хорошо luck.Foroughi

0

Ну, я не уверен, что это работает, как я думаю, но: autocompletetagda ta.aspx может показывать данные, но когда вы делаете источник: данные, данные не готовы, я имею в виду, что он не содержит данных. Я решаю аналогичную проблему, заполнив источник в функции обратного вызова (здесь обратный вызов autocompletetagdata.aspx).

0

Это, кажется, как ваш ASPX-скрипт отправляет новый список значений из базы данных в новую строку. Виджет автозаполнения на самом деле ожидает JSON-кодированный массив строк или объектов. Вы можете использовать JsonTextWriter class для создания JSON-кодированных данных. Пример кода:

SqlDataReader reader = myCommand.ExecuteReader(); 
JsonTextWriter writer = JsonTextWriter(Response.Output); 
writer.WriteStartArray(); // we must send a "[" even if there is no data 
if (reader.HasRows) 
{ 
    while (reader.Read()) 
    { 
     writer.WriteString(reader.GetString(0)); 
    } 
} 
writer.WriteEndArray(); // we must send a "]" even if there is no data 
reader.Close(); 
0

У меня проблема с автозаполнением. Я пришел сюда, потому что вы включили qtip. Эти две библиотеки (jquery/autocomplete и qtip) имеют проблемы при использовании обоих.