Jquery AutoComplete с база данни

Изглежда не мога да разбера какво не е наред с кода за лентата за търсене за автоматично довършване.

Единственото нещо, за което се сещам, е, че посочих грешното нещо под URL

aspx Javascript

    $(document).ready(function() {
        SearchText();
    });
    function SearchText() {
        $(".ui-autocomplete").autocomplete({
            source: function(request, response) {
                $.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    url: "Admin_home.aspx/GetAutoCompleteData",
                    data: "{'Car':'" + document.getElementById('query').value + "'}",
                    dataType: "json",
                    success: function(data) {
                        response(data.d);
                    },
                    Error: function(results) {
                        alert("Error");
                    }
                });
            }
        });
    }

</script>`

aspx html code

Изглежда не мога да напиша или поставя html тук. Това е просто
asp:Textbox ID="query" class="ui.autocomplete"

c# код

    [WebMethod]
    public static List<string> GetAutoCompleteData(string Car)
    {
        List<string> result = new List<string>();
        using (SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["CarsConnectionString"].ConnectionString))
        {
            using (SqlCommand cmd = new SqlCommand("select DISTINCT Car from T_Car where Car like '%'+ @SearchText +'%", con))
            {
                con.Open();
                cmd.Parameters.AddWithValue("@SearchText", Car);
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    result.Add(dr["Car"].ToString());
                }
                return result;
            }
        }
    }

Ще трябва ли част от html да бъде обвита в панел за актуализиране на AJAX?

Също така имам търсенето да изтегли имена от sql сървър 2005.


person user1512593    schedule 27.07.2012    source източник


Отговори (2)


това не е начинът, по който jQuery Autocomplete работи,

Автоматичното довършване на jQuery автоматично изпраща текста, въведен в текстовото поле, до мястото, което сте посочили в „термин“ от низ на заявка, до който имате достъп в уеб метод или манипулатор като този

         string input = HttpContext.Current.Request.QueryString["term"];

нещо като това

              [WebMethod]
public static List<string> GetAutoCompleteData(string Car)
{
    string input = HttpContext.Current.Request.QueryString["term"];
    List<string> result = new List<string>();
    using (SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["CarsConnectionString"].ConnectionString))
    {
        using (SqlCommand cmd = new SqlCommand("select DISTINCT Car from T_Car where Car like '%'+ @SearchText +'%", con))
        {
            con.Open();
            cmd.Parameters.AddWithValue("@SearchText", input);
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                result.Add(dr["Car"].ToString());
            }
            return result;
        }
    }
}

това влиза във вашата .aspx страница

    $(".ui-autocomplete").autocomplete({
        source: "Admin_home.aspx/GetAutoCompleteData",
        select: function (event, ui) { }
      });

РЕДАКТИРАНЕ:

Всъщност никога не съм правил това в уеб метод, обикновено използвам манипулатор .ashx, но това трябва да работи също толкова добре.

когато промените всичко това, стартирайте сайта в режим на отстраняване на грешки, започнете да пишете в текстовото поле и поставете f12 и наблюдавайте трафика, който това причинява - ако въведете "abc", трябва да изглежда така

Admin_home.aspx/GetAutoCompleteData?term=abc

тогава отговорът, с който може да се наложи да си поиграете малко, по подразбиране .net ще добави "d: ...." към отговора към клиентската страна, но можете да го наблюдавате и да коригирате съответно

Друга редакция:

         <asp:Textbox ID="query" class="ui.autocomplete">

не е това, което поставяте в jquery

          $(".ui-autocomplete").autocomplete({

трябва да бъде

         <asp:Textbox ID="query" class="ui-autocomplete">

Още една редакция:

Тук липсва един единствен цитат

        using (SqlCommand cmd = new SqlCommand("select DISTINCT Car from T_Car where Car like '%'+ @SearchText +'%", con))

замени с

         using (SqlCommand cmd = new SqlCommand("select DISTINCT Car from T_Car where Car like '%'+ @SearchText +'%' ", con))
person Scott Selby    schedule 27.07.2012
comment
да, ще публикувам и вашия JAVASCRIPT, не го наричайте java - момчетата от java ще ви крещят - person Scott Selby; 27.07.2012
comment
И така, какво ще бъде на мястото за срок? - person user1512593; 27.07.2012
comment
оставете този ред на мира, jquery автоматично изпраща заявка с име term - person Scott Selby; 27.07.2012
comment
Съжалявам за късния отговор и благодаря за помощта. Въпреки това ми прави грешка с името „контекст“, което не съществува в текущия контекст - person user1512593; 27.07.2012
comment
Моят Request.QueryString е просто Джейн Блек. Не бебешко синьо Също така, какво имахте предвид с asp:Textbox? Имам текстовото поле, вложено в няколко div в тялото. Искате да кажете, че това е грешно? - person user1512593; 27.07.2012
comment
не, единственото нещо, което изтъквах относно текстовото поле е, че сте написали class=ui.autocomplete , след това в jquery сте направили .ui-autocomplete едното беше '-' и едно '.' - person Scott Selby; 27.07.2012
comment
Влагам javascript, който ми даде под функцията SearchText() { и премахвам останалите неща, които имах там, нали? Освен това с източника посочвам ли на коя страница се намирам? т.е. ако кодът отива в Admin home.aspx, тогава източникът ще бъде Admin_home.aspx/GetAutoCompleteData? - person user1512593; 27.07.2012
comment
заменете целия jQuery с това, което написах, можете да добавите към него каквото искате, след като го накарате да работи - и източникът е мястото, където се намира уебметодът, няма значение от коя страница го извиквате, можете да използвате същия точен код от друга aspx страница и използвайте източник: Admin_home.aspx/GetAutoCompleteData за вашия източник - person Scott Selby; 27.07.2012
comment
нека да продължим тази дискусия в чата - person user1512593; 28.07.2012
comment
google използва jquery autocomplete с ashx, манипулаторът на ashx е по-лесен за използване от уеб метод, но и двата са много сходни и по-голямата част от кода ви може да бъде превключен там - person Scott Selby; 30.07.2012
comment
да Това направих в крайна сметка. Благодаря Скот! - person user1512593; 30.07.2012

опитайте това може би ще помогне

<script type="text/javascript">
    $(function() {
        $(".ui-autocomplete").autocomplete({
            source: function(request, response) {
                $.ajax({
                    url: "Admin_home.aspx/GetAutoCompleteData",
                    data: "{ 'Car': '" + request.term + "' }",
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    dataFilter: function(data) { return data; },
                    success: function(data) {
                        response($.map(data.d, function(item) {
                            return {
                                value: item
                            }
                        }))
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown) {
                        alert(textStatus);
                    }
                });
            },
            minLength: 2
        });
    });
    </script>
person COLD TOLD    schedule 27.07.2012