jquery, json与ashx的完美结合
2010-01-30 05:08
399 查看
AJAX的应用程序,免不了经常需要在页面和服务之间异步传输数据。我已经多次写过这方面的东西。下面还是有一个比较经典的案例,我认为掌握到这些,那么处理异步请求的时候就相当方便了。
第一部分:客户端页面
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
第二部分:ashx部分
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
不错吧,这样以后处理Json就是如此容易
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
通过Json来传递数据,可以避免以前用传统的post或者get方面拼接字符串中的麻烦
第一部分:客户端页面
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="WebApplication1.WebForm3" %>"json2.js" type="text/javascript"> "text/javascript"> $(function() { //构造一个json对象,很类似于C#中的匿名类型 var employee = { Name: "chenxizhang", Country: "China", Orders: [ { OrderID: 10248 }, { OrderID: 10249 } ] }; //发送POST请求,数据也是json格式。但数值部分需要转换为字符串 $.post("EmployeeHandler.ashx", { data: JSON.stringify(employee) }, function(result) { var r = JSON.parse(result); alert(r.Message); }); });
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
第二部分:ashx部分
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Runtime.Serialization.Json; using System.Runtime.Serialization; using System.IO; using System.Text; //必须添加System.ServiceModel.Web和System.Runtime.Serialization的引用 namespace WebApplication1 { /// /// $codebehindclassname$ 的摘要说明 /// [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class EmployeeHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { var ser = new DataContractJsonSerializer(typeof(Employee)); var data = context.Request["data"]; var ms = new MemoryStream(Encoding.UTF8.GetBytes(data)); var emp = (Employee)ser.ReadObject(ms); ms.Close(); //此时已经得到了相应的Employee实例,可以进行服务器端的处理 var ser2 = new DataContractJsonSerializer(typeof(ActionResult)); var ms2 = new MemoryStream(); var result = new ActionResult() { Code = 200, Message = "成功" }; ser2.WriteObject(ms2, result); ms2.Position = 0; var buffer = new byte[ms2.Length]; ms2.Read(buffer, 0, buffer.Length); ms2.Close(); context.Response.Write(Encoding.UTF8.GetString(buffer)); //返回结果 } public bool IsReusable { get { return false; } } } [DataContract] public class Employee { [DataMember] public string Name { get; set; } [DataMember] public string Country { get; set; } [DataMember] public OrderItem[] Orders { get; set; } } [DataContract] public class OrderItem { [DataMember] public int OrderID { get; set; } } [DataContract] public class ActionResult { [DataMember] public int Code { get; set; } [DataMember] public string Message { get; set; } } } 第三部分:进一步的优化,编写两个扩展方法(这是C# 3.0的新特性)
/// /// 这个类型实现了对JSON数据处理的一些扩展方法 /// public static class JsonExtensions { /// /// 根据一个字符串,进行JSON的反序列化,转换为一个特定类型 /// /// /// /// public static T ToJsonObject(this string data) { var serializer = new DataContractJsonSerializer(typeof(T)); var ms = new MemoryStream( Encoding.UTF8.GetBytes(data)); var result = (T)serializer.ReadObject(ms); ms.Close(); return result; } /// /// 将任何一个对象转换为JSON字符串 /// /// /// /// public static string ToJsonString(this T obj) { var serializer = new DataContractJsonSerializer(typeof(T)); var ms = new MemoryStream(); serializer.WriteObject(ms, obj); ms.Position = 0; var result = Encoding.UTF8.GetString(ms.GetBuffer()); ms.Close(); return result; } }
这样,在ashx里面的代码就很简单了
var emp = context.Request["data"].ToJsonObject(); var result = new ActionResult() { Code = 200, Message = "成功" }; context.Response.Write(result.ToJsonString());
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
不错吧,这样以后处理Json就是如此容易
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
通过Json来传递数据,可以避免以前用传统的post或者get方面拼接字符串中的麻烦
相关文章推荐
- jquery, json与ashx的完美结合
- jquery, json与ashx的完美结合
- jquery, json与ashx的完美结合
- jquery, json与ashx的完美结合
- jquery, json与ashx的完美结合
- jquery, json与ashx的完美结合
- 结合jquery,json很好地利用ashx文件开发高性能ajax
- 使用JQuery结合HIghcharts实现从后台获取JSON实时刷新图表
- jquery $.getJSON 与.NET 结合用法推荐
- jquery与json结合返回集合结果集
- Mysql 5.7 JSON 与 物联网设备上数完美结合
- 实例讲解jquery与json的结合
- 实例讲解jquery与json的结合
- asp.net中 使用jquery+ashx 做ajax,json做数据传输
- Jquery+Json+Handler文件结合应用实例
- asp.net中 使用jquery+ashx 做ajax,json做数据传输
- ashx文件结合ajax使用(返回json数据)
- 无刷新分页控件(原创)(jQuery+json+ashx)(Ajax)
- jQuery与getJson结合的用法实例
- 玩玩AJAX之使用ashx文件响应来自JQuery的JSON请求