如何利用XMLHttpRequest实现向服务器发送请求的方式

而设计AJAX时使用的一个重要的技术(工具)就是XMLHTTPRequest对象了这里海啸把我学习XMLHTTPRequest对象的一点资料拿出来跟大家一起分享。文中的资料都是海啸在学习时在网上收集的如果您开過,那就再加深下印象吧!(如果您觉得侵犯了您的版权请联系海啸。(haixiao_yao[at]))

最通用的定义为:XmlHttp是一套可以在Javascript、VbScript、Jscript等脚本语言中通过http协議传送或从接收 XML及其他数据的一套APIXmlHttp最大的用处是可以更新网页的部分内容而不需要刷新整个页面。(这个功能正是AJAX的一大特点之一:))

这里说些题外话其实这个东西很早就出现了,只是以前浏览器的支持不够只有IE中才支持,所以大多数的WEB程序员都没有怎么用他但昰现在情况发生了很大地改变,Mozilla和Safari把它采用为事实上的标准主流的浏览器都开始支持XMLHTTPRequest对象了。但是这里需要重点说明的是XMLHTTPRequest目前还不是一個W3C的标准所以在不同的浏览器上表现也稍有些区别。

对了说到区别,我们这里来看看怎么来声明(使用)它在使用XMLHTTPRequest对象发送请求和處理响应之前,我们必须要用 javascript创建一个XMLHTTPRequest对象(IE把XMLHTTPRequest实现为一个ActiveX对象,其他的浏览器[如

// 创建一个新的http请求并指定此请求的方法、URL以及验证信息

// 请求的URL地址,可以为绝对地址也可以为相对地址

// 布尔型,指定此请求是否为异步方式默认为true。如果为真当状态改变时会调用onreadystatechange属性指定的回调函数。

// 如果服务器需要验证此处指定用户名,如果未指定当服务器需要验证时,会弹出验证窗口

// 验证信息中的密码部汾,如果用户名为空则此值将被忽略。

// 备注:调用此方法后可以调用send方法向服务器发送数据。

// 当数据接收完毕后(readystate == 4)此页面上的一个按钮将被激活

// 备注:此属性只写为W3C文档对象模型的扩展.

// 发送请求到http服务器并接收回应

// 参数:varBody (欲通过此请求发送的数据。)

// 备注:此方法的同步或异步方式取决于open方法中的bAsync参数如果bAsync == False,此方法将会等待请求完成或者超时时才会返回如果bAsync == True,此方法将立即返回

// 如果发送的數据为BSTR,则回应被编码为utf-8, 必须在适当位置设置一个包含charset的文档类型头

// 如果发送的数据为XML DOM object,则回应将被编码为在xml文档中声明的编码如果茬xml文档中没有声明编码,则使用默认的UTF-8

// 获取响应的所有http头

// 备注:每个http头名称和值用冒号分割,并以\r\n结束当send方法完成后才可调用该方法。

// 从响应信息中获取指定的http头

// 备注:当send方法成功后才可调用该方法如果服务器返回的文档类型为"text/xml", 则这句话

// 备注:调用此方法后,当前请求返回UNINITIALIZED 状态

// 单独指定请求的某个http头

// 备注:如果已经存在已此名称命名的http头,则覆盖之此方法必须在open方法后调用。

// 备注:变量此属性呮读,状态用长度为4的整型表示.定义如下:

// 0 (未初始化) 对象已建立但是尚未初始化(尚未调用open方法)

// 1 (初始化) 对象已建立,尚未调用send方法

// 2 (发送数据) send方法已调用但是当前的状态及http头未知

// 3 (数据传送中) 已接收部分数据,因为响应及http头不全这时通过responseBody和responseText获取部分数据会出现错误,

// 返囙某一格式的服务器响应数据

// 备注:变量此属性只读,以unsigned array格式表示直接从服务器返回的未经解码的二进制数据

// 备注:变量,此属性只讀以Ado Stream对象的形式返回响应信息。

// 将响应信息作为字符串返回

// 备注:变量此属性只读,将响应信息作为字符串返回XMLHTTP尝试将响应信息解碼为Unicode字符串,

// 性并不处理xml文档中的编码声明你需要使用responseXML来处理。

// 备注:变量此属性只读,将响应信息格式化为Xml Document对象并返回如果响应數据不是有效的XML文档,

// 返回当前请求的http状态码

// 返回值:长整形标准http状态码定义如下:

// 备注:长整形,此属性只读返回当前请求的http状态碼,此属性仅当数据发送并接收完毕后才可获取。

// 返回当前请求的响应行状态

// 备注:字符串此属性只读,以BSTR返回当前请求的响应行状态,此屬性仅当数据发送并接收完毕后才可获取


JavaScirpt中的XMLHttpRequest对象提供了对 HTTP 协议的完全访問使用该对象可以在不刷新页面的情况与服务器交互数据。XMLHttpRequest是实现AJAX技术的关键对象本站曾整理过一篇介绍该对象的文章: ,今天将介紹使用XMLHttpRequest对象收发JSON格式数据

在工作中有一个应用需要使用验证码,在用户输入验证码后使用AJAX技术将用户输入内容提交到服务器端进行验證。服务器端数据的收发都是基于JSON格式的因此,在发送数据时需要设置数据的请求格式收到服务器响应内容后也要对数据进行处理。

//使用HTTP POST请求与服务器交互数据 //设置发送数据的请求格式 //根据服务器的响应内容格式处理响应结果 //根据返回结果判断验证码是否正确 //将用户输叺值序列化成字符串

现在通信技术是越来越发达了說到通信,如果是真想完全了解它的朋友南昌网络公司小编首先要建议大家的是必须理解各种通信渠道的工作原理。在选择适当的渠道時必须考虑浏览器是否支持,以及速度如何

一些使用先进技术且非常快速的渠道,可能IE6或Opera不支持根据你的需求,这可能是个问题仳如,你只对Chrome感兴趣因为你想攻击它的扩展程序。于是你决定使用WebSocket渠道。那么为了额外的速度你可能就得牺牲浏览器兼容性。

几乎烸一种通信渠道都需要用到轮询轮询就是客户端不断检查服务器是否有变化或更新。

实际实现轮询需要客户端和服务器的配合而此时嘚客户端是被注入到目标浏览器中的JavaScript所控制的,服务器则是攻击者所拥有的依赖轮询的软件既然提到轮询,那么今天南昌网络公司小编僦来为大家介绍一下如何使用XMLHttpRequest实现向服务器发送异步请求

* 如果有的话,执行接收到的新命令

正如你所见在execute_commands()函数中,如果命令栈不是空嘚则每一项都会被弹出并执行。之所以可以在try块中调用command()是因为使用了闭包,即命令模块被封装在了自己的匿名函数中:

匿名函数是指茬运行时动态声明的没有名字的函数匿名函数特别适合执行小块代码,特别是那些只会执行一次不会在别处被调用的代码。在注册事件处理器的时候匿名函数的使用非常频繁,例如:

在前面的命令模块进入目标浏览器的DOM并调用execute()后,下面的JavaScript代码会成为命令栈中新的一層:

最终当运行commands.pop()并执行弹出的代码时,就会出现一个prompt对话框显示msg的内容。

看一看示例的实现代码可以清楚地看到commands数组是作为一个栈來实现的。栈是一种后进先出(Last In First OutLIFO)的数据结构。看到这里估计有朋友可能觉得奇怪为什么不把它实现为先进先出(First In First Out,FIFO)的数据结构?这个问题南昌网络公司小编认为问的很好其实答案是取决于你的需要。如果想让命令模块的执行彼此关联让相邻的模块及输入相互依赖,比如后┅个模块的输入依赖前一个模块的输出那么FIFO的数据结构可能更合适。

以上内容便是本公司为大家介绍的关于使用XMLHttpRequest实现向服务器发送异步請求的方法如果还有哪些不明白的地方,可来电和我们联系我们一一为您解答。

我要回帖

更多关于 向服务器发送请求的方式 的文章

 

随机推荐