1

aspx コードは次のとおりです。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestingJqueryAutoComplete.aspx.cs"
 Inherits="ProjectForTestingPurpose.TestingJqueryAutoComplete" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
 <title></title>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js" type="text/javascript"></script>

<style type="text/css">
        *
        {
            margin:0; padding:0;
        }
</style>

<script type="text/javascript">
    $(document).ready(function () {

        $("#txtCities").autocomplete({
            minLength: 2,
            source: function (request, response) {
                $.ajax({
                    type: "POST",
                    dataType: "json",
                    url: "/GenericAjaxHandler.ashx",
                    data: { text: request.term, type: "requestcities" }
                }); //ajax
            }, //source
            success: function (data) {
                debugger;
                alert(data);
                response($.map(data, function (item) {
                    return {
                        label: item.name,
                        value: item.name
                    }
                }
                    )//function
                ); //response
            }, //success
            error: function (response) {
                debugger;
                alert(response.responseText);
            },
            failure: function (response) {
                debugger;
                alert(response.responseText);
            },
            select: function (event, ui) {
                alert("hello");
            }

        }); // autocomplete

    });            // document ready
</script>

都市

サーバー側のコード。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ProjectForTestingPurpose
{
    /// <summary>
    /// Summary description for GenericAjaxHandler
    /// </summary>
    public class GenericAjaxHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "application/json";

            if (context.Request["type"].ToString().ToLower() == "requestcities")
            {
                string response = string.Empty;

                response = "[{\"name\":\"Islamabad\"},{\"name\":\"Lahore\"},{\"name\":\"Karachi\"}]";

                context.Response.Write(response);
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

jquery autocomplete の成功ハンドラーが呼び出されないという問題がわかりません。

4

1 に答える 1

0

オートコンプリート ハンドラーの問題ではないようです。作成した JSON が適切にフォーマットされていない可能性があります。これを回避するには、Genric リスト コレクションを作成し、このコレクションを JSON にシリアル化する必要があります。

コードサンプル

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ProjectForTestingPurpose
{
    /// <summary>
    /// Summary description for GenericAjaxHandler
    /// </summary>
    public class GenericAjaxHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "application/json";

            if (context.Request["type"].ToString().ToLower() == "requestcities")
            {
                string response = string.Empty;

                List<City> lstCities = new List<>();

                City city = new City();
                city.Name = "Islamabad";
                lstCities.Add(city);

                city = new City();
                city.Name = "Lahore";
                lstCities.Add(city);

                city = new City();
                city.Name = "Karachi";
                lstCities.Add(city);

                JavaScriptSerializer serializer = new JavaScriptSerializer();
                response = serializer.serialize(lstCities)

                context.Response.Write(response);
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

    public class City
    {
      private string _name;

      public City()
      {
      }

      public string Name
      {
        get;
        set;
      }
    }
}
于 2014-01-08T15:56:28.027 に答える