XmlHttp.open函数

XML 
xmlHttp.Open
建一个新的http请求,并指定此请求的方法、URL以及验证信息

语法

oXMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword);

参数

bstrMethod
http方法,例如:POST、GET、PUT及PROPFIND。大小写不敏感。
支持:GET, POST, HEAD, PUT, DELETE, MOVE, PROPFIND, PROPPATCH, MKCOL, COPY, LOCK, UNLOCK, OPTIONS

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

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

bstrUser[可选]
如果服务器需要验证,此处指定用户名,如果未指定,当服务器需要验证时,会弹出验证窗口。

bstrPassword[可选]
验证信息中的密码部分,如果用户名为空,则此值将被忽略。

Example

下面的例子演示从服务器请求book.xml,并显示其中的book字段。

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");xmlhttp.open("GET","http://localhost/books.xml", false);xmlhttp.send();var book = xmlhttp.responseXML.selectSingleNode("//book[@id='bk101']");alert(book.xml);

备注

调用此方法后,可以调用send方法向服务器发送数据。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1、概述
2、XMLHttpRequest 的方法和属性
XMLHttpRequest包含了基本的属性和方法,正是通过这些方法和属性实现了对服务器的通讯。Ajax依赖XMLHttpRequest完成与服务器的通信。
XMLHttpRequest的基本方法如下:
Abort():停止发送当前请求。
getAllResponseHeaders():获取服务器返回的全部响应头。
getResponseHeader(“headerLabel”):根据响应头的名字来获取响应头。
Open(“method”,”URL”,…):建立与服务器的连接,并设置请求的方法是否使用异步请求。如果远程服务需要用户名,密码,则提供。
Send(content):发送请求。
setRequestHeader(“label”,”values”):在发送请求之前,先设置请求头。
看代码 2/getAllResponseHeaders

XMLHttpRequest的属性如下:
1、 onreadystatechange:用于指定XMLHttpRequest对象状态改变时的事件处理函数。当XMLHttpRequest的状态放生改变时,该函数将被触发。XMLHttpRequest对象有如下几种状态:
0 :XMLHttpRequest对象还没有完成初始化;
1 :XMLHttpRequest对象开始发送请求;
2 :XMLHttpRequest对象的请求发送完成;
3 :XMLHttpRequest对象开始读取服务器的响应;
4 :XMLHttpRequest对象读取服务器响应结束。
2、 readyState: XMLHttpRequest对象的处理状态。
3、 responseText:用于获取服务器的响应文本。
4、 responseXML:用于获取服务器响应的XML文档对象。
5、 status:服务器返回的状态码,只有当服务器的响应已经完成时,才会有该状态码。
6、 statusText:服务器返回的状态文本信息,只有当服务器的响应已经完成时,才会有该状态文本信息。
看代码2/readyState反映的就是状态的变化过程。
注意:onreadystatechange属性在IE中可以不区分大小写,但是在非IE浏览器中,将严格区分大小写,只能写成onReadyStateChange的形式。

服务器响应完成后,依然不能直接获取服务器响应。应为服务器响应有多种情况。为了判断服务器响应是否正确,可以通过XMLHttpRequest对象的statue和statusText两个属性将上面HTML页面的回调函数改为如下形式:
function processResponse(){
if(xmlrequest.readyState == 4){
alert(xmlrequest.status + "\n"
+ xmlrequest.statusText);
}
}
该代码表示:当响应完成时,通过alert输出status和statusText的值。
含义
status:服务器响应的状态码;
statusText:服务器响应的状态提示;

服务器常用的状态码及其对应的含义如下:
200 服务器响应正常。
500 服务器内部错误。

结论:如果想通过JavaScript获取服务器响应,必须先判断服务器响应是否完成。判断服务器的响应是否完成,可以通过判断XMLHttpRequest对象的readyState属性进行。当readyState为4时,响应完成;服务器响应完成后,还应判断服务器响应是否正确。判断服务器响应是否正确,可以通过判断XMLHttpRequest的status是否为200来完成。
3、发送请求
Ajax与传统Web应用的最大区别在于:发送请求的方式。传统web应用采用表单提交或者在请求地址中增加请求参数的方式发送请求,Ajax则采用异步方式在后台发送请求。Ajax请求正是通过XMLHttpRequest对象发送的。
3.1 发送简单请求
发送不带任何参数的请求。通常用于自动刷新的应用。
这种情况下操作步骤如下:
第一步,初始化XMLHttpRequest对象;
第二步,打开与服务器的连接,打开连接时,确定发送请求的方法:采用GET或者POST,以及是否采用异步方式。
第三步,设置XMLHttpRequest状态改变时的事件处理函数。
第四步,发送请求,如采用POST方法发送请求,可以发送带参数的请求,GET方式不可以。
看代码3/simple
程序分析:服务器采用的是JSP。Second.jsp。每连接一次服务器端,都要向客户端返回一个字符串,字符串的格式是由3个随机整数通过$连接而成。
客户端first.html。responseText属性里面存储的是服务器端返回的字符串。
split(String str) 把指定的字符串按照$符号进行分离,分离后的结果作为一个字符串数组。
JS中的setTimeout(函数,时间)函数:循环调用一个函数。第二个参数表示时间,单位是毫秒,第一个参数是要循环的函数名。
3.2 发送GET请求
看代码3/GET
本程序是涉及到ajax的技术非常简单。但是其中有几个JS语句需要特别注意,很常用。
解释如下:
option = document.createElement("option");   
创建元素(标签),元素名取决于传入的字符串
txtNode = document.createTextNode(cityList[i]);  
创建文本节点。文本的内容取决于传入的字符串。这里需要特别注意的是两个标签之间的内容我们认为是一个节点,是文本节点。例如:<abcd>你好啊!</abcd> 其中的“你好啊!”就看作是两个标签元素之间的一个文本节点。
option.appendChild(txtNode);
向标签元素内添加文本节点。
displaySelect. appendChild (option);
根据程序上下文,可以知道displaySelect是一个下拉框的标签元素。appendChild的作用是向下拉框内添加子节点。其中option是要添加的一个opotion子标签。
3.3发送POST请求
POST请求适应性更广,允许发送的参数更多,参数不会被浏览者看到。推荐尽量使用POST而不是GET方法。
发送POST请求的3个步骤:
1 使用open方法打开连接时,指定使用POST方法发送请求。
2 设置正确的请求头,POST请求通常应该设置Content-Type请求头。
3 发送请求,请求参数可以在send方法中确认。
看代码3/POST
程序分析:
发送请求的xmlrequest.open("POST", uri, true);语句后面不再跟参数。参数在xmlrequest.send("id="+id);内完成。另,xmlrequest.setRequestHeader("Content-Type"
, "application/x-www-form-urlencoded");语句不可丢。
注意:如果不带任何参数,send(null)方法不能丢。
3.4发送请求时的编码问题
首先,看代码encoding
该程序得到的结论:
1 尽量不要使用GET方式传递参数给服务器。
2 使用POST方式传递参数的用法。一要注意客户端使用send方法,二要注意服务器端字符集设置采用request.setCharacterEncoding("UTF-8");语句。
3 做到客户端HTML编码与服务器端request.setCharacterEncoding("UTF-8");保持一致。
3.5发送XML请求
对于请求是key-value对的形式传递数据,可以采用POST方式,对于复杂的参数可以考虑使用XML方式传递。
不详细讲解,感兴趣的可以看代码xmlRequest
4、处理服务器响应
4.1 处理的时机
时机:readyState 为4 并且status为200或者304.
4.2使用文本响应
获得服务器响应很简单,通过responseText和responseXML。
responseText:生成普通文本响应。返回服务器响应的字符串。适用于简单的响应。前面例子中已经非常详细的说明用法。不再赘述。
responseXML:生成XML响应。
4.3使用XML响应。
看代码xmlResponse
阅读该代码需要注意的事情
1、 服务器端响应的是完整的XML。
2、 客户端3条核心语句:
var xmldoc = xmlrequest.responseXML;把服务器端响应的全部XML看做一个完整的对象。
var cityList = xmldoc.getElementsByTagName("city");按指定的元素名来获取数组。即:相同元素名的全部元素组成一个数组。
cityList[i].text  获取XML中某个元素内的文本的值用该text属性。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值