2016-11-18 90 views
0

我有相关的过滤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所以我亲自期待数据:{}属性是过滤器。我想这不是这种情况? @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

如果你婉t在客户端进行过滤,您可以尝试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())); 
    } 

}