AJAX 异步交互 ashx
[搜自网络,还给网络]
1、Microsoft Ajax Library的客户端架构
- MicrosoftAJAXLibrary的组成部分之一
- 负责ASP.NETAJAX框架中所有的客户端与服务器端的通信
- 其默认实现封装了XMLHttpRequest的功能
<script language="javascript" type="text/javascript">
function getXMLHttpRequest()
{
if (window.XMLHttpRequest)
{
//适用于firefox浏览器创建异步通讯对象
return new window.XMLHttpRequest();
}
else
{
//适用于IE来创建异步通讯对象,两个是不同的版本
var progIDs = [ 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP' ];
for (var i = 0; i < progIDs.length; i++)
{
try
{
var xmlHttp = new ActiveXObject(progIDs[i]);
return xmlHttp;
}
catch (ex) { }
}
return null;
}
}
function sendRequest()
{
var xhr = getXMLHttpRequest();
xhr.open("POST", "Handlers/RandomNumber.ashx");
//设置准备状态改变的回调函数
xhr.onreadystatechange = function()
{
//设置onReadyStateChange作为回调函数
//将异步通讯对象作为this的上下文
onReadyStateChange.apply(xhr);
}
xhr.send(null);
}
function onReadyStateChange()
{
//异步通讯对象的readyState的5种状态
//0 - (未初始化)还没有调用send()方法
//1 - (载入)已调用send()方法,正在发送请求
//2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
//3 - (交互)正在解析响应内容
//4 - (完成)响应内容解析完成,可以在客户端调用了
if (this.readyState == 4)
{
//Http响应状态,值很多,但是我们只需要知道200为正常返回
if (this.status == 200)
{
alert(this.responseText);
}
else
{
throw new Error();
}
}
}
</script>
2、使用Asp.Net Ajax异步通讯层
Asp.Net Ajax异步通讯层主要有三个类WebRequest、WebRequestExecutor、WebRequestManager,这三个类都在Sys.Net命名空间下。
- WebRequest类:负责收集(存储)请求信息。
事件completed 得到回复后触发,就是表明这个异步传输已经由服务器那边给出了回应,不管这个回应是错误的还是超时的 add_completed/remove_completed 添加/移除completed事件的事件处理器 getResolvedUrl 获得完整的URL invoke 执行(发送)请求 set_url(url) 设置服务器响应页面/Handler的地址 get_headers() 得到请求的头信息集合 set_body(data) 设置发送到服务器的请求内容 set_httpVerb(verb) 设置请求所用的Http方法(Post, Get, Put,) set_timeout(time) 设置超时时间 get_executor()
得到发送请求的Executor对象 set_userContext 设置附加于WebRequest的对象


















































abort() | 取消当前请求 |
executeRequest() | 执行请求 |
getAllResponseHeaders() | 获取回复内所有的头信息,返回值是一个集合 |
getResponseHeader(HeaderName) | 获取回复内指定的头信息 |
get_aborted()/set | 表示请求是否被取消 |
get_responseAvailable() | 表示是否得到了正确的结果 |
get_responseData() | 获得字符串形势的回复内容 |
get_started() | 表示请求是否已经开始 |
get_statusCode() | 表示回复状态的代码 |
get_statusText() | 表示回复状态的文字 |
get_timedOut() | 表示回复是否是超时状态 |
get_xml() | 获得xml形式的回复内容 |
get_webRequest() | 获得当前正在执行的WebRequest对象 |
在上面两个类的方法和属性说明中,get_/set_开头的是属性,属性应该有响应的get/set方法,我只标明了一部分,但是有的属性肯定是只读属性,这里我没有明确标明,也没有尝试,在实际编程中,应该很容易知道哪个是只读属性。在发送请求的函数中可以使用webRequest.get_executor()来得到WebRequestExecutor类的实例,在completed事件处理函数中,可以通过webRequestExecutor.get_webRequest得到webRequest类的实例,有点循环引用的意思。
3、WebRequestManager类的说明
invokingRequest事件 | 即将发出请求时触发,可用于取消某个请求 |
completedRequest事件 | 请求结束时触发,它早于WebRequest对象的completed事件触发 |
defaultTimeout属性 | 默认的超时时间 |
defaultExecutorType | 默认的发送请求的Executor类型 |
add/remove_invokingRequest(handler) | 添加/移除invokingRequest的事件处理器 |
add/remove_completedRequest(handler) | 添加/移除completedRequest的事件处理器 |
























■ 拿起勇气,探索你未知的世界。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端