AJAX中XMLHttpRequest.readyState总是为1

原创 2014年07月04日 15:21:52

写了一点ajax异步与后台通讯的代码。

代码块很固定:

[javascript] view plain copy
  1. varXMLHttpReqScript;
  2. functioncreateXMLHttpReqScript(){
  3. if(window.XMLHttpRequest){//Mozilla浏览器
  4. XMLHttpReqScript=newXMLHttpRequest();
  5. }
  6. elseif(window.ActiveXObject){//IE浏览器
  7. try{
  8. newActiveXObject("Msxml2.XMLHTTP");
  9. }catch(e){
  10. try{
  11. "Microsoft.XMLHTTP");
  12. catch(e){}
  13. }
  14. functionsendRequestScript(){
  15. varworker=document.getElementById("workerID").value;
  16. varport=document.getElementById("portID").value;
  17. createXMLHttpReqScript();//(1)创建
  18. varurl="/SWTestSystem/GlobalServ?status=showResult&&worker="+worker+"&&port="+port;
  19. XMLHttpReqScript.open("GET",url,true);//(2)open,设置其请求的方式、地址、是否异步
  20. XMLHttpReqScript.onreadystatechange=processResponseScript;//(3)状态变化时调用的方法
  21. XMLHttpReqScript.send(null);//(4)send请求
  22. functionprocessResponseScript(){
  23. if(XMLHttpReqScript.readyState==4){//请求已完成
  24. if(XMLHttpReqScript.status==200){
  25. displayScript();
  26. setTimeout("sendRequestScript()",1000);
  27. else{
  28. //window.alert("yourrequestpageiserror");
  29. functiondisplayScript(){
  30. varreceive=XMLHttpReqScript.responseText;//获取responseText(服务器返回的字符串)
  31. document.getElementById("script").value=receive;
  32. }

[javascript] view plain copy
  1. varXMLHttpReqScript;
  2. functioncreateXMLHttpReqScript(){
  3. //Mozilla浏览器
  4. newXMLHttpRequest();
  5. }
  6. //IE浏览器
  7. try{
  8. "Msxml2.XMLHTTP");
  9. catch(e){
  10. try{
  11. "Microsoft.XMLHTTP");
  12. catch(e){}
  13. }
  14. functionsendRequestScript(){
  15. "workerID").value;
  16. "portID").value;
  17. createXMLHttpReqScript();<spanstyle="white-space:pre"></span>//(1)创建
  18. "&&port="+port;
  19. true);<spanstyle=//(2)open,GET请求
  20. //(3)状态变化时调用的方法
  21. null);<spanstyle=//(4)send
  22. functionprocessResponseScript(){
  23. if(XMLHttpReqScript.readyState==4){
  24. if(XMLHttpReqScript.status==200){
  25. displayScript();
  26. ottom:none;border-left:3px solid rgb(108,1000);
  27. else{
  28. //window.alert("yourrequestpageiserror");
  29. functiondisplayScript(){
  30. varreceive=XMLHttpReqScript.responseText;
  31. "script").value=receive;
  32. }

但是之前页面总是不刷新,调试过后发现是因为XMLHttpReqScript.readyState 总是等于1 。

经查找,错误原因:

XMLHttpReqScript.onreadystatechange=processResponseScript();//写成这样了。

改成上面就好了

下面摘取网上某人(kokoBox@csdn)对readyState的分析

readyState有五种可能的值:
0(未初始化):(XMLHttpRequest)对象已经创建,但还没有调用open()方法。
1(载入):已经调用open()方法,但尚未发送请求。
2(载入完成):请求已经发送完成。
3(交互):可以接收到部分响应数据。
4(完成):已经接收到了全部数据,并且连接已经关闭。

readyState状态状态说明
(0)未初始化
此阶段确认XMLHttpRequest对象是否创建,并为调用open()方法进行未初始化作好准备。值为0表示对象已经存在,否则浏览器会报错--对象不存在。

(1)载入
此阶段对XMLHttpRequest对象进行初始化,即调用open()方法,根据参数(method,true)完成对象状态的设置。并调用send()方法开始向服务端发送请求。值为1表示正在向服务端发送请求。

(2)载入完成
此阶段接收服务器端的响应数据。但获得的还只是服务端响应的原始数据,并不能直接在客户端使用。值为2表示已经接收完全部响应数据。并为下一阶段对数据解析作好准备。

(3)交互
此阶段解析接收到的服务器端响应数据。即根据服务器端响应头部返回的MIME类型把数据转换成能通过responseBody、responseText或responseXML属性存取的格式,为在客户端调用作好准备。状态3表示正在解析数据。

(4)完成
此阶段确认全部数据都已经解析为客户端可用的格式,解析已经完成。值为4表示数据解析完毕,可以通过XMLHttpRequest对象的相应属性取得数据。

概而括之,整个XMLHttpRequest对象的生命周期应该包含如下阶段:

创建-初始化请求-发送请求-接收数据-解析数据-完成


对象XMLHttpRequest属性status的含义:

100——客户必须继续发出请求(Continue)

101——客户要求服务器根据请求转换HTTP协议版本(Switching protocols)

200——交易成功(OK)

201——提示知道新文件的URL(Created)

202——接受和处理、但处理未完成(Accepted)

203——返回信息不确定或不完整(Non-Authoritative information)

204——请求收到,但返回信息为空(No Content)

205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件(Reset Content)

206——服务器已经完成了部分用户的GET请求(Partial Content)

300——请求的资源可在多处得到(Multiple Choices)

301——删除请求数据(Moved Permanently)

302——在其他地址发现了请求数据(Found)

303——建议客户访问其他URL或访问方式(See Other)

304——客户端已经执行了GET,但文件未变化(Not Modified)

305——请求的资源必须从服务器指定的地址得到(Use Proxy)

306——前一版本HTTP中使用的代码,现行版本中不再使用

307——申明请求的资源临时性删除(Temporary Redirect)

400——错误请求,如语法错误(Bad Request)

401——请求授权失败(Unauthorized)

402——保留有效Chargeto头响应(Payment required)

403——请求不允许(由于服务器上文件或目录的权限设置导致资源不可用)(Forbidden)

404——没有发现文件、查询或URl(没有找到指定的资源)(Not Found)

405——用户在Request-Line字段定义的方法不允许(Method Not Allowed)

406——根据用户发送的Accept拖,请求资源不可访问(Not Acceptable)

407——类似401,用户必须首先在代理服务器上得到授权(Proxy Authentication required)

408——客户端没有在用户指定的饿时间内完成请求(Request Timeout)

409——对当前资源状态,请求不能完成(Conflict)

410——服务器上不再有此资源且无进一步的参考地址(Gone)

411——服务器拒绝用户定义的Content-Length属性请求(Length required)

412——一个或多个请求头字段在当前请求中错误(Precondition Failed)

413——请求的资源大于服务器允许的大小(Request Entity Too Large)

414——请求的资源URL长于服务器允许的长度(Request-URI Too Long)

415——请求资源不支持请求项目格式(Unsupported Media Type)

416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段(Requested Range Not Suitable)

417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求(Expectation Failed)

500——服务器产生内部错误(Internal Server Error)

501——服务器不支持请求的函数(Not Implemented)

502——服务器暂时不可用,有时是为了防止发生系统过载(Bad Gateway)

503——服务器过载或暂停维修(Service Unavailable)

504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长(Gateway Timeout)

505——服务器不支持或拒绝支请求头中指定的HTTP版本(HTTP Version Not Supported )

12029——网络不通.刷新一下就知道了

AJAX中XMLHttpRequest.readyState总是为1的更多相关文章

  1. three.js模拟实现太阳系行星体系功能

    这篇文章主要介绍了three.js模拟实现太阳系行星体系功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  2. HTML5页面无缝闪开的问题及解决方案

    这篇文章主要介绍了HTML5页面无缝闪开方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. ios – 为什么,将nil作为参数从Objc C发送到swift类初始化器,用新对象替换nil参数

    除非属性本身被声明为nonnull:

  4. ios – 在Swift中对MKCircle进行子类化

    我想通过添加另一个String属性来继承MKCircle,我们称之为“代码”.这个属性不是可选的和常量的,所以我必须从初始化器设置它,对吧?有没有办法定义一个单一的便利初始化器,在这种情况下需要3个参数?本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. ios – AVAudioPlayer不再使用Swift 2.0/Xcode 7 beta

    对于我的iPhone应用程序中的vartestAudio声明,我在这里收到错误“调用可以抛出,但错误不能从属性初始化程序中抛出”当我转到Xcode7测试版时,就发生了这种情况.如何在Swift2.0中使用此音频剪辑?

  6. ios – 斯威夫特.在初始化所有存储的属性之前在方法调用中使用’self’

    解决方法在初始化所有非可选实例变量之前,您无法在self上调用方法.有几种方法可以解决这个问题.>将属性更改为选项或隐式解包选项(不建议)>使buildCircle()方法静态或只是一个在文件中运行并为所有圆圈调用addSubview()在所有属性初始化并且您调用之后super.init()等等.你必须避免在自己之前打电话给自己class已初始化.

  7. ios – Objective-C警告未找到超类“-init”的指定的初始化程序的方法覆盖

    我在一个应用程序中清理警告,我收到了两次这个警告对于这行代码和这一行我相当新的Objective-C和谷歌这个警告,只是不明白的解决方案我的问题是如何摆脱这些警告?

  8. ios – UICollectionView不能使用UISearchController?

    在WWDC2014年的“AInsideInsidePresentationControllers”中,演示者展示了如何在UITableView中设置UISearchController.他们通过设置searchController的searchBar框架,然后将其设置为tableView的tableHeaderView来实现.不幸的是,UICollectionView没有相当于tableHeade

  9. ios7 – 如何使用默认的IOS映像

    嗨,我是IOS开发的新手.我知道如何在IOS应用程序中使用图像.但是我不知道如何使用默认图像,如开发者站点中提到的共享或书签图标.我想用它们我必须下载这些图像集或那些可用在xcode?

  10. ios – 在词典上引用成员’subscript’

    我正在尝试为类创建一个可用的初始化程序.我的类将使用来自网络请求的输入进行初始化.网络不可靠,我想创建一个初始化器,检查所有属性上的存在,否则它将失败.我试图在这里使用守卫,所以请随时指出方法中的任何明显的错误:守卫self.jobId行无法编译,错误:对成员’下标’的模糊引用关于如何纠正这个错误的任何想法?

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部