异步请求request.status .responseText 等
来源:互联网 发布:斑马斑马 知乎 编辑:程序博客网 时间:2024/05/27 01:30
XMLHttpRequest简介
对象的很少的几个方法和属性。
- open():建立到服务器的新请求。
- send():向服务器发送请求。
- abort():退出当前请求。
- readyState:提供当前HTML的就绪状态。
- responseText:服务器返回的请求响应文本。
XMLHttpRequest对象的open()方法来完成。该方法有五个参数:
- request-type:发送请求的类型。典型的值是GET或POST,但也可以发送HEAD请求。
- url:要连接的URL。
- asynch:如果希望使用异步连接则为true,否则为false。该参数是可选的,默认为true。
- username:如果需要身份验证,则可以在此指定用户名。该可选参数没有默认值。
- password:如果需要身份验证,则可以在此指定口令。该可选参数没有默认值。
如果监控XHTML/Ajax页面及其连接脚本之间的网络和数据传递,当调用open()方法时将看不到任何通信。
在Ajax应用程序中需要了解五种就绪状态:
- 0:请求没有发出(在调用open()之前)。
- 1:请求已经建立但还没有发出(调用send()之前)。
- 2:请求已经发出正在处理之中(这里通常可以从响应得到内容头部)。
- 3:请求已经处理,响应中通常有部分数据可用,但是服务器还没有完成响应。
- 4:响应已完成,可以访问服务器响应并使用它。
所有的文档和规范都强调,只有在就绪状态为4时数据才可以安全使用。
Internet Explorer(1,2,3,4) |Firefox(1,2,3,4) |Safari 2.0.1(2,3,4) | Opera8.5(3,4)
<body><p><img src="breakneck-logo_4c.gif" alt="Break Neck Pizza" /></p><form action="POST"><p>Enter your phone number:<input type="text" size="14" name="phone" id="phone"onChange="getCustomerInfo();" /></p><p>Your order will be delivered to:</p><div id="address"></div><p>Type your order in here:</p><p><textarea name="order" rows="6" cols="50" id="order"></textarea></p><p><input type="submit" value="Order Pizza" id="submit" /></p></form>
</body>
<script language="javascript" type="text/javascript">var request = false;try {request = new XMLHttpRequest();} catch (trymicrosoft) {try {request = new ActiveXObject("Msxml2.XMLHTTP");} catch (othermicrosoft) {try {request = new ActiveXObject("Microsoft.XMLHTTP");} catch (failed) {request = false;}}}if (!request)alert("Error initializing XMLHttpRequest!");function getCustomerInfo() {var phone = document.getElementByIdx("phone").value;var url = "/cgi-local/lookupCustomer.php?phone=" + escape(phone);request.open("GET", url, true); //准备好打开请求,且配置好了要发送的变量就等发送请求了//通常使用其中的前三个参数。事实上,即使需要异步连接,也应该指定第三个参数为 “true”。//多数请求使用GET就够了,再加上URL,这就是使用open()方法需要的全部内容了。request.onreadystatechange = updatePage;request.send(null);//一旦用open()配置好之后,就可以发送请求了。send()只有一个参数,就是要发送的内容。//如果不需要通过send()传递数据,则只要传递null作为该方法的参数即可。}function updatePage() {if (request.readyState == 4)if (request.status == 200){var response = request.responseText.split("|"); //用split进行分切document.getElementByIdx("order").value = response[0]; //response[0]为切出的第1个document.getElementByIdx("address").innerHTML =response[1].replace(/\n/g,"<br/>");//设定其div中html内容为;replace为js中的替代方法alert("Server is done!");}else if(request.status ==404)alert("Request URL does not exist");elsealert("Error: status code is " + request.status); }
</script>
那么Ajax和Web 2.0最大的秘密是什么呢?秘密就在于XMLHttpRequest的一个简单属性onreadystatechange。
建立其请求然后发出请求。
此外,因为是异步请求,所以JavaScript方法(例子中的getCustomerInfo())不会等待服务器。
因此代码将继续执行,就是说,将退出该方法而把控制返回给表单。
用户可以继续输入信息,应用程序不会等待服务器。
当服务器完成请求之后,会查看XMLHttpRequest对象,特别是onreadystatechange属性。然后调用该属性指定的任何方法。
onreadystatechange属性在调用send()之前设置的,也就是发送前就要告诉服务器其反馈可回调哪个方法。
前面提到,服务器在完成请求之后会在XMLHttpRequest的onreadystatechange属性中查找要调用的方法。
这是真的,但还不完整。事实上,每当HTTP就绪状态改变时它都会调用该方法。这意味着什么呢?首先必须理解HTTP就绪状态。
HTTP就绪状态表示请求的状态或情形。
它用于确定该请求是否已经开始、是否得到了响应或者请求/响应模型是否已经完成。
它还可以帮助确定读取服务器提供的响应文本或数据是否安全。
与大多数跨浏览器问题一样,这些就绪状态的使用也不尽一致
但不同的浏览器也会有不同的开始,有的是0开始有的是1,有的是2或3.但是4都是代表响应已完成.
所以我们可以在回调的方法中用 if (request.readyState ==4)来检测状态.
但是此状态只说明服务器回馈响应了信息回来了,并没代表此信息正确与否.
404错误码的情形,它表示该页面不存在
403 访问数据受到保护
401 禁止访问
request.status,状态码是200,它表示一切顺利。
现在可以确保请求已经处理完成(通过就绪状态),
服务器给出了正常的响应(通过状态码),
最后我们可以处理服务器返回的数据了。
返回的数据保存在XMLHttpRequest对象的responseText属性中。
关于responseText中的文本内容,比如格式和长度,有意保持含糊。
这样服务器就可以将文本设置成任何内容。
比方说,一种脚本可能返回逗号分隔的值,另一种则使用管道符(即|字符)分隔的值,还有一种则返回长文本字符串。何去何从由服务器决定。
在本文使用的例子中,服务器返回客户的上一个订单和客户地址,中间用管道符分开。然后使用订单和地址设置表单中的元素值
- 异步请求request.status .responseText 等
- Ext.Ajax.request异步请求
- Request异步请求处理PART2
- ajax异步如何返回responseText
- ExtJs.ajax.request的异步请求
- 如何获取Request.JSON返回的responseText
- responseText
- 在服务器端判断request是否来自Ajax的异步请求
- Angular服务Request异步请求的详细分析
- 异步http报错Request cannot be executed; I/O reactor status: INACTIVE
- HttpAsyncClient异步报错Request cannot be executed; I/O reactor status: INACTIVE
- HTTP Request Status 汇总
- 上行调度请求(Scheduling Request,SR) 与uffer Status Report(BSR)
- MT 112 Status of a Request for Stop Payment of a Cheque支票止付请求状态
- 微信小程序函数中有wx.request 返回值为undefined 因为request是异步请求
- 【异步请求相关知识点】xmlHttp.status的值(HTTP状态表)
- Request请求
- request请求
- Android NDK支持STL的一些注意事项
- 开源前端框架纵横谈
- 详谈高性能TCP服务器的开发
- ffmpeg 中支持的codec
- Spring MVC学习(七)-------SpringMVC数据验证
- 异步请求request.status .responseText 等
- Android 发送短信功能
- 流程图控件FlowChart.NET指定布局算法教程
- Android 软件开发之数据的 新建 储存 读取 删除 详解
- USACO/fence 3.3.1 欧拉回路
- android bitmap
- 子jsp给父jsp传参
- Hiero工具的利用
- 内存越界的一种定位方法