2012-03-25 23 views
0

Ich fragte mich, ob ich ein Autocomplete-Formular mit jQuery und SQL machen könnte, möglicherweise mit jQuery .change() und SQL SELECT * FROM table WHERE name LIKE '%$q%' Funktionalität. Könnte das möglich sein?jQuery AutoComplete Formular mit SQL?

Antwort

0

Konzeptionell ist es möglich, aber jQuery kann eine SQL DB nicht direkt treffen. Deshalb macht das Dollarzeichen in '%$q%' keinen Sinn für mich. Da Sie wahrscheinlich nach Wörtern suchen, die mit dem beginnen, was auch immer der Benutzer eingegeben hat, sollte Ihr LIKE Ausdruck nur das '%' am Ende haben, nicht das am Anfang.

0

Wenn Sie versuchen, nur an Textfelder zu binden und die automatische Vervollständigung anzuzeigen, wenn sich ihr Wert ändert, sollte Folgendes funktionieren.

//Javascript 
$("#txtSearchValue").autocomplete({ 
    source: function (request, response) { 
     var regex = RegExp('[^a-z0-9\\&\\s]', 'gi'); 
     var obj = { 
      searchValue: request.term.replace(regex, '') 
     }; 

     $.ajax({ 
      type: "POST" 
      , contentType: "application/json; charset=utf-8" 
      , url: "AutoComplete.asmx/QueryList" 
      , data: JSON.stringify(obj) 
      , dataType: "json" 
      , async: true 
      , success: function (data) { 
       response(data.d); 
      } 
      , error: function (request, status, error) { 
       var err = jQuery.parseJSON(request.responseText); 
       alert(err.Message); 
      } 
     }); 
    } 
    , minLength: 2 
}); 


//Auto-Complete on the server (code using C#) 
[WebMethod] 
[System.Web.Script.Services.ScriptMethod] 
public string[] QueryList(string searchValue) 
{ 
    string sqlSelect = @"select column_name 
         from table 
         where column_name like '%' + @target + '%'"; 
    using(SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["connString"].ConnectionString)) 
    { 
     using(SqlDataAdapter da = new SqlDataAdapter(sqlSelect, conn)) 
     { 
      da.SelectCommand.Parameters.AddWithValue("@target", searchValue); 
      DataTable dt = new DataTable(); 
      conn.Open(); 
      da.Fill(dt); 

      string[] results = new string[dt.Rows.Count]; 
      for (int i=0; i<results.Length; i++) 
      { 
       results[i] = dt.Rows[i]["column_name"].ToString(); 
      } 

      return results; 
     } 
    } 
}