ashx文件是.net 2.0新加的文件类型(其实在.net 1.0下已经可用,但是没有公开提供).

ashx文件和aspx文件有什么不同? 我们先新建一个ashx文件看看:

ashx<%@ WebHandler Language="C#" Class="Handler" %>

using System;using System.Web;

public class Handler : IHttpHandler {

public void ProcessRequest (HttpContext context) {        context.Response.ContentType = "text/plain";        context.Response.Write("Hello World");    }

public bool IsReusable {get {return false;        }    }

}

看,比aspx简洁多了吧.只有一个文件,没有后台cs文件(基于代码安全考虑,后边我们会自己添加这个文件).ashx对比aspx文件,就好像少了cs文件.其实这就是ashx和aspx不同的地方,因为aspx要将前后台显示和处理逻辑分开,所以就弄成了两个文件,其实,在最终编译的时候,aspx和cs还是会编译到同一个类中去.这中间就要设计html的一些逻辑处理.而ashx不同,它只是简单的对web http请求的直接返回你想要返回的结果.比aspx少处理了html的过程.理论上,比aspx要快.

看看.net config文件中对两个文件类型请求的配置吧

config设置<add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="True" /><add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" />

可以看到两个文件处理的类不一样(ashx处理的类叫SimpleHandleFactory,既然叫Simple,应该处理过程也比较Simple.响应速度也应该快点吧:)

只要具体继承了IHttpHandler如何处理的问题,我这里找到一篇早期的,介绍.net 2.0编译模型的问题.比较深奥,要慢慢鼓捣一下:

点击下载文章

鼓捣完了你就大概明白了ashx不过.net里面自定义好的一个请求格式,ashx文件类的文件的处理过程要比aspx要简单得多.

不说这些东西了.说会怎么利用ashx文件来实现我们的AJAX请求吧(其实实现和JQuery和JSON关系不大)

看看JS代码:

JSfunction getSecondaryContent(menuId){    $.getJSON("Article/FreshNews.ashx", function(data) {var txt = "<ul class=\"news\">";        $.each(data,function(i,n){if(n.Url == "#")                txt += "<li><a href=\"#\" οnclick=\"articleTitle_onclick('"+ n.ArticleId +"')\">"+ n.Title +"</a></li>";else                txt += "<li><a href=\""+ n.Url +"\" target=\"_blank\">"+ n.Title +"</a></li>";        });        txt += "</ul>";        $("#"+menuId).after(txt);    });}

和用其他文件没有差别吧?天下乌鸦一般黑!(汗~~~忽然冒出这个比喻.自己都觉得汗-_-||)

ashx文件如下:

ashx<%@ WebHandler Language="C#" Class="FreshNews" %>

怎么样?是不是发觉少了点东西?和新建的文件不同了吧?呵呵,其实是我们将上边这句话以外的所有代码都放到App_Code里面了.

APP_Codeusing System;using System.Web;

public class FreshNews : IHttpHandler{public void ProcessRequest(HttpContext context)    {//context.Response.ContentType = "text/plain";        context.Response.ContentType = "application/json";        context.Response.Charset = "utf-8";string txt = "[{\"Title\":\"学习使用AJAX技术\",\"Url\":\"#\",\"ArticleId\":\"Art1234\"},{\"Title\":\"使用JQuery构建网站\",\"Url\":\"#\",\"ArticleId\":\"Art1235\"},{\"Title\":\"使用JSON文件传输数据\",\"Url\":\"#\",\"ArticleId\":\"Art1236\"}]";        context.Response.Write(txt);    }

public bool IsReusable    {get        {return false;        }    }

}

为什么要这样?因为MS说系统发布的时候ashx和asmx类型文件都是"生成程序集。原始文件保留在原位置,作为完成请求的占位符。",为了发布后不让人随便看到我们的代码,我们只有把代码移到App_Code里面了.不过,.net的反编译比什么都容易-_-|| 聊胜于无,心理安慰吧!

还有一个小插曲:因为我在web.config里面的设置是:

webconfig<globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" responseHeaderEncoding="utf-8" />

就是因为JSON文件只支持Unicode编码,所以我就一狠心将所有编码都改成utf-8,想着这样做就一定没有错了.谁知道,js接收的数据中文死活是乱码,无论我怎么设置ContentType都是一样,差点没有把我气疯.

后来千辛万苦才想起好像这些编码和当前区域设置有关,续步尝试之下,发现只有将fileEncoding设置为"gb2312"才算正确获取到数据:

right config<globalization fileEncoding="gb2312" requestEncoding="utf-8" responseEncoding="utf-8" responseHeaderEncoding="utf-8" />

胡言乱语了这么久,都不知道自己要说什么了-_-|| 还是洗洗睡了.

忘了顺便说一句:在ashx文件用使用Session必须实现 IRequiresSessionState 接口.

转载于:https://www.cnblogs.com/KenBlove/archive/2008/11/27/1342394.html

玩玩AJAX之使用ashx文件响应来自JQuery的JSON请求.相关推荐

  1. 使用ashx文件响应来自JQuery的JSON请求

    ashx文件是.net 2.0新加的文件类型(其实在.net 1.0下已经可用,但是没有公开提供). ashx文件和aspx文件有什么不同? 我们先新建一个ashx文件看看:   <%@ Web ...

  2. ajax ashx session 为空,jquery ajax post 方式ashx文件取不到值。

    我的Common.js如下 //处理一般AJAX功能. function InvokeHander(url,type,data, onSuccess, onFailure) { $.ajax({ ur ...

  3. ajax ashx 请选择文件,jquery ajax post 方式ashx文件取不到值。

    我的Common.js如下 //处理一般AJAX功能. function InvokeHander(url,type,data, onSuccess, onFailure) { $.ajax({ ur ...

  4. php ajax xmlhttpreq 上传文件 get,使用jQuery Ajax异步上传文件方法总结

    一 使用FormData对象上传文件 FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单".但上传文件部分只有底 ...

  5. ajax get怎么传参数值,如何使用jQuery在GET请求中传递参数

    我应该如何在jQuery Ajax请求中传递查询字符串值?我目前按照以下方式执行它们,但我确信有一种更简洁的方法,不需要我手动编码. $.ajax({ url: "ajax.aspx?aja ...

  6. j2ee:servlet练习鲜花项目(购物车、分页、ajax、iframe弹出层、jquery、json(计算小计、总计)、map集合高级遍历、图片上传)...

    第一:概念 购物车全过程的理解:  1.新建一个购物车类,这样,这个类里面就可以封装商品对象和商品数量了.  2.每种商品都是一个购物车  3.把所有的购物车放在一起,也就是放在一个map集合中,这样 ...

  7. ashx获取input file 文件_通过Ajax方式上传文件(input file),使用FormData进行Ajax请求...

    一直以来上传文件都使用的是别人的组件,今天看下无刷新上传内部具体的做法.上传文件可以使用form的形式来上传,也可以通过构造formData使用ajax来上传文件: 上传图片 $(function ( ...

  8. ashx文件与ajax,ashx文件猎取$.ajax()方法发送的数据_

    <ashx文件猎取$.ajax()方法发送的数据_>由会员分享,可在线阅读,更多相关<ashx文件猎取$.ajax()方法发送的数据_(7页珍藏版)>请在人人文库网上搜索. 1 ...

  9. ajax hapi上传文件,javascript – hapi.js Cors Pre-flight不返回Access-Control-Allow-Origin标头...

    我使用(Dropzone js)上传了ajax文件.它将文件发送到我的hapi服务器.我意识到浏览器发送了一个PREFLIGHT OPTIONS METHOD.但我的hapi服务器似乎没有发送正确的响 ...

  10. ashx文件和HttpHandler

    ashx 文件用于写web handler的..ashx必须包含IsReusable. 如下例所示.}.ashx比.aspx的好处在与不用多一个html 注意了VS2005中Web应用程序项目模板里的 ...

最新文章

  1. Android 个人学习笔记- 导入android项目,无法自动生成R文件的解决方法
  2. PowerDesigner 企业架构模型 ( EAM ) 说明
  3. 组策略链接顺序优先级
  4. 算法-二分搜索-找出最大值和次大值
  5. 一、策略模式(Strategy Pattern)
  6. 如何Super Vectorizer从Mac 上的图像中删除多余的颜色区域?
  7. hdu5927Auxiliary Set
  8. maya通过python输出fbx_[转载]FBX动画导入导出经验心得(MayaToMax,MayaToMaya)
  9. 再见,罗永浩!再见,锤子!
  10. 宝可梦 序列号认证服务器发生了错误,宝可梦探险寻宝无法连接服务器是什么原因...
  11. html将四张图片合并,照片拼图在线制作 自带多种照片拼图模板,自由排版将多张照片合成一张...
  12. 做一只展翅翱翔的雄鹰
  13. 【CicadaPlayer】初始化ffmpeg及设置ffmpeg日志
  14. 关于Office 365 显示语言的设置(注册开通时的语言选择及注册开通后的语言显示修改)
  15. Java2EE体系结构图
  16. 【coolshell酷壳】你可能不知道的Shell
  17. 新手:linux环境配置以及linux下的pycharm安装
  18. 关于DRV8303/8301电路框图
  19. thymeleaf模板引擎的优势何在?
  20. python 计算两个日期之间的月数差额

热门文章

  1. 解读灰度直方图的信息
  2. arcpy 实现列举目录下的要素类与描述矢量数据要素类
  3. python windows故障处理_python+windows automation windows有时会出现故障
  4. Android View layout方法的简单使用案例
  5. html能在hade中注释吗,A第1章 HTML超文本标记语言(1-20)OK.doc
  6. windows系统c语言编译环境,在Windows平台搭建C语言开发环境
  7. 七牛云异步抓取java_带你玩转七牛云存储——高级篇
  8. 运算放大器权威指南_运算放大器科普文章
  9. matlab语音去噪_如何使用XAudioPro对音频去噪
  10. python-学生管理系统--7-显示功能模块