2016-11-18 13 views
0

私は、ZipCodesとRegionsのリストを作成するフィルタリングされたAJAXコールに関連する問題があります。AJAXリクエスト・コールのフィルタリング

ZipCodeService.ashxから取り込んだJSON配列には、「名前」と「コード」というフィールドがあり、「名前」フィールドに「SampleCity」という結果を取得しようとしています。しかし、今ではフィールドとそのデータのすべてが返されているので、フィルタは明らかに私が期待しているように動作していません。どんな助けでも大歓迎です!

私はJQuery/Javascriptの新機能で、AJAXの新機能です。

site.js

$.ajax({ 
    async: true, 
    contentType: 'application/json; charset=utf-8', 
    method: "POST", 
    url: "../ZipCodeService.ashx", 
    data: { Name: "SampleCity" }, 
    success: function (data) { 

      var $select = $('#list1'); 
      $.each(data, function (i, item) { 
       $('<option>', 
       { 
        value: item.Code + " - " + item.Name, 
       }).html(item.Code + " - " + item.Name).appendTo($select), 
       '</option>'; 
      }); 

    } 
}); 

ZipCodeService.ashx

public class ZipCodeService : IHttpHandler 
{ 
    [DataContract] 
    public class ZipCode 
    { 
     [DataMember] 
     public string Code { get; set; } 

     [DataMember] 
     public string Name { get; set; } 
    } 

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

     var p = new ZipCode[] { 
      new ZipCode() 
     { 
      Code = "00001", 
      Name = "SampleCity" 
     },new ZipCode() 
     { 
      Code = "00002", 
      Name = "SampleCity2" 
     },new ZipCode() 
     { 
      Code = "00003", 
      Name = "SampleCity3" 
     },new ZipCode() 
     { 
      Code = "00004", 
      Name = "SampleCity4" 
     } 
     }; 

     MemoryStream stream1 = new MemoryStream(); 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(ZipCode[])); 
     ser.WriteObject(stream1, p); 

     context.Response.Write(Encoding.UTF8.GetString(stream1.ToArray())); 
    } 

} 
+2

このコードでは「フィルタ」は表示されません。すべての結果を '#list1'に追加しています。 – Turnip

+0

AJAXとJqueryの初心者は間違いありませんので、私は個人的にdata:{}属性がフィルタになると期待しています。これは事実ではないと思いますか? @Turnip – Xariez

+1

ZipCodeService.ashxのコードを追加できますか? JSONオブジェクトをパラメータとしてページに送ります。もし.ashxのページがそれを期待しているなら、すべてがうまくいくはずです。そうでなければ、別のものを送るべきでしょう。 – Bardo

答えて

1

私はあなたがそのためのif条件を使用することができると思う:あなたはワン場合

$.ajax({ 
    async: true, 
    contentType: 'application/json; charset=utf-8', 
    method: "POST", 
    url: "../ZipCodeService.ashx", 
    data: { 
     Name: "SampleCity" 
    }, 
    success: function(data) { 
     var $select = $('#list1'); 
     $.each(data, function(i, item) { 
      if (Item.Name == "SampleCity") { 
       $select.append('<option value="' + item.Code + '">' + item.Name + '</option>'); 
      } 
     }); 
    } 
}); 
+0

ちょうどそれも自分自身をこのように修正しました!私はこれを答えとしてマークしていますが、実際にはそれを修正したコードです。 – Xariez

+0

@Xariezクライアント側ではなくサーバー側でフィルタを実行しないようにしますか? – Aruna

0

をクライアント側でフィルタリングを行うには、Surjeetのソリューションを試すことができます。

しかし、すでに入力データを送信したときと同じ処理をサーバー側で実行する必要がある場合は、以下の方法を試すことができます。

私はJavaScriptSerializerを使用して受信データをシリアライズしました。このSystem.Web.Script.Serializationの名前空間をアセンブリSystem.Web.Extensions.dllを参照して追加できます。

public class ZipCodeService : IHttpHandler 
{ 
    [DataContract] 
    public class ZipCode 
    { 
     [DataMember] 
     public string Code { get; set; } 

     [DataMember] 
     public string Name { get; set; } 
    } 

    [Serializable] 
    public class Zip 
    { 
     public string Name { get; set; } 
    } 

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

     var p = new ZipCode[] { 
      new ZipCode() 
     { 
      Code = "00001", 
      Name = "SampleCity" 
     },new ZipCode() 
     { 
      Code = "00002", 
      Name = "SampleCity2" 
     },new ZipCode() 
     { 
      Code = "00003", 
      Name = "SampleCity3" 
     },new ZipCode() 
     { 
      Code = "00004", 
      Name = "SampleCity4" 
     } 
     }; 

     var sr = new StreamReader(context.Request.InputStream); 
     var stream = sr.ReadToEnd();  
     var serializer = new JavaScriptSerializer(); 
     var postedData = serializer.Deserialize<Zip>(stream); 

     var filtered = p.Where(z => z.Name == postedData.Name).ToArray(); 

     MemoryStream stream1 = new MemoryStream(); 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(ZipCode[])); 
     ser.WriteObject(stream1, filtered); 

     context.Response.Write(Encoding.UTF8.GetString(stream1.ToArray())); 
    } 

}