ext异步请求一个aspx/ashx/web service取得数据,服务端返回一个json.然后客户端接收并显示....

今天在论坛中有人问ext和asp.net是如何进行交互的,对于一个刚入门的新手来说,这个问题可能会使其比较迷惑,下面我写一个非常简单的例子来说明一下ext如何与asp.net来进行数据交互

Default.htm:

  1. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <htmlxmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title>UntitledPage</title>
  5. <linkrel="stylesheet"type="text/css"href="ext/resources/css/ext-all.css"/>
  6. <scripttype="text/javascript"src="ext/adapter/ext/ext-base.js"></script>
  7. <scripttype="text/javascript"src="ext/ext-all.js"></script>
  8. </head>
  9. <body>
  10. <divid="listContainer"></div>
  11. <scripttype="text/javascript">
  12. varstore=newExt.data.JsonStore({
  13. url:'DefaultHandler.ashx?method=getlist',
  14. root:'items',
  15. remoteSort:true,
  16. fields:[
  17. 'TestName',
  18. 'TestValue'
  19. ],
  20. listeners:{
  21. load:function(store,records,options){
  22. grid.render();
  23. },
  24. loadexception:function(proxy,options,response){
  25. Ext.Msg.alert('Loaddataerror!',response.responseText);
  26. }
  27. }
  28. });

  29. Ext.onReady(function(){
  30. Ext.QuickTips.init();
  31. store.load();
  32. });

  33. varlistContainer=Ext.get("listContainer");
  34. vargrid=newExt.grid.GridPanel({
  35. el:'listContainer',
  36. width:listContainer.getComputedWidth(),
  37. autoHeight:true,
  38. store:store,
  39. disableSelection:false,
  40. loadMask:true,
  41. deferRowRender:false,
  42. sm:newExt.grid.RowSelectionModel({singleSelect:true}),
  43. columns:[
  44. {
  45. header:'name',
  46. dataIndex:'TestName',
  47. sortable:true
  48. },{
  49. header:'value',
  50. dataIndex:'TestValue',
  51. sortable:true
  52. }]
  53. });

  54. window.onresize=function(){
  55. grid.setWidth(listContainer.getComputedWidth());
  56. };
  57. functionButton1_onclick(){
  58. //这里简单的来访问一下store中的数据
  59. alert(store.data.items[0].data.TestName);
  60. alert(store.data.items[0].data.TestValue);
  61. }

  62. </script>
  63. <inputid="Button1"type="button"value="display"onclick="returnButton1_onclick()"/>
  64. </body>
  65. </html>

DefaultHandler.ashx:

  1. <%@WebHandlerLanguage="C#"Class="DefaultHandler"%>

  2. usingSystem;
  3. usingSystem.Web;
  4. usingSystem.Data;

  5. publicclassDefaultHandler:IHttpHandler{
  6. publicvoidProcessRequest(HttpContextcontext){
  7. stringstr=context.Request.QueryString["method"];
  8. if(string.IsNullOrEmpty(str))
  9. {
  10. context.Response.Write("error!");
  11. return;
  12. }

  13. switch(str)
  14. {
  15. case"getlist":
  16. GetList(context);
  17. break;
  18. //下边还有可以接着写.
  19. }
  20. context.Response.End();
  21. }

  22. publicboolIsReusable{
  23. get{
  24. returnfalse;
  25. }
  26. }

  27. publicvoidGetList(HttpContextcontext)
  28. {
  29. //这里模拟一个DataTable,实际应用中可能是去数据库里查询数据
  30. DataTabledt=newDataTable();
  31. dt.Columns.Add("TestName",typeof(string));
  32. dt.Columns.Add("TestValue",typeof(string));
  33. for(inti=0;i<6;i++)
  34. {
  35. DataRowdr=dt.NewRow();
  36. dr["TestName"]="TestName"+i.ToString();
  37. dr["TestValue"]="TestValue"+i.ToString();
  38. dt.Rows.Add(dr);
  39. }
  40. //将一个DataTable中的数据转成json,实际开发中可以用Newtonsoft.Json等
  41. //组件将集合类等,方便的转成json对象
  42. System.Text.StringBuildersb=newSystem.Text.StringBuilder();
  43. sb.Append("{items:[");
  44. foreach(DataRowdrindt.Rows)
  45. {
  46. sb.Append("{");
  47. sb.AppendFormat("TestName:'{0}',TestValue:'{1}'",dr[0],dr[1]);
  48. sb.Append("},");
  49. }
  50. //输出拼成的json
  51. context.Response.Write(sb.ToString().Trim(',')+"]}");
  52. }
  53. }

例子完了.很容易吧.在实际的开发中往往会把页面中的javascript脚本单独写到一个js文件中.这样会有很多的好处.

本示例中我用ashx(HttpHandler)文件来处理客户端请求,你也可以用aspx,web services等等.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值