XMLHttpRequest of ajax

调用

function(Url) {
  var XML = new XMLHttpRequest();
  XML.onreadystatechange = function() {
    if (XML.readyState == 4)
    {
      if (XML.status == 200)
      {
        //XML.responseText
      }
      else
      {
        //XML.statusText
      }
    }
    else
    {
      //数据加载中...
    }
  };
  XML.open("GET",Url);
  XML.send(null);
};
定义XMLHttpRequest 适应不同的浏览器

// IE support
if (window.ActiveXObject && !window.XMLHttpRequest)
{
  window.XMLHttpRequest = function()
    {
      var msxmls = new Array('Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0','Msxml2.XMLHTTP','Microsoft.XMLHTTP');
      for (var i = 0; i < msxmls.length; i++)
      {
        try
        {
          return new ActiveXObject(msxmls[i]);
        }
        catch (e)
        {
        }
      }
      return null;
    };
}

// Opera support
if (window.opera && !window.XMLHttpRequest)
{
  window.XMLHttpRequest = function()
  {
    this.readyState = 0; // 0=uninitialized,1=loading,2=loaded,3=interactive,4=complete
    this.status = 0; // HTTP status codes
    this.statusText = '';
    this._headers = [];
    this._aborted = false;
    this._async = true;
    this._defaultCharset = 'ISO-8859-1';
    this._getCharset = function()
    {
      var charset = _defaultCharset;
      var contentType = this.getResponseHeader('Content-type').toUpperCase();
      val = contentType.indexOf('CHARSET=');
      if (val != -1)
      {
        charset = contentType.substring(val);
      }
      val = charset.indexOf(';');
      if (val != -1)
      {
        charset = charset.substring(0, val);
      }
      val = charset.indexOf(',');
      if (val != -1)
      {
        charset = charset.substring(0, val);
      }
      return charset;
    };

this.abort = function()
    {
      this._aborted = true;
    };

this.getAllResponseHeaders = function()
    {
      return this.getAllResponseHeader('*');
    };

this.getAllResponseHeader = function(header)
    {
      var ret = '';
      for (var i = 0; i < this._headers.length; i++)
      {
        if (header == '*' || this._headers[i].h == header)
        {
          ret += this._headers[i].h + ': ' + this._headers[i].v + '\n';
        }
      }
      return ret;
    };

this.getResponseHeader = function(header)
    {
      var ret = getAllResponseHeader(header);
      var i = ret.indexOf('\n');
      if (i != -1)
      {
        ret = ret.substring(0, i);
      }
      return ret;
    };

this.setRequestHeader = function(header, value)
    {
      this._headers[this._headers.length] = {h:header, v:value};
    };

this.open = function(method, url, async, user, password)
    {
      this.method = method;
      this.url = url;
      this._async = true;
      this._aborted = false;
      this._headers = [];
      if (arguments.length >= 3)
      {
        this._async = async;
      }
      if (arguments.length > 3)
      {
        opera.postError('XMLHttpRequest.open() - user/password not supported');
      }
      this.readyState = 1;
      if (this.onreadystatechange)
      {
        this.onreadystatechange();
      }
    };

this.send = function(data)
    {
      if (!navigator.javaEnabled())
      {
        alert("XMLHttpRequest.send() - Java must be installed and enabled.");
        return;
      }
      if (this._async)
      {
        setTimeout(this._sendasync, 0, this, data);
      }
      else
      {
        this._sendsync(data);
      }
    };

this._sendasync = function(req, data)
    {
      if (!req._aborted)
      {
        req._sendsync(data);
      }
    };

this._sendsync = function(data)
    {
      this.readyState = 2;
      if (this.onreadystatechange)
      {
        this.onreadystatechange();
      }
      var url = new java.net.URL(new java.net.URL(window.location.href), this.url);
      var conn = url.openConnection();
      for (var i = 0; i < this._headers.length; i++)
      {
        conn.setRequestProperty(this._headers[i].h, this._headers[i].v);
      }
      this._headers = [];
      if (this.method == 'POST')
      {
      // POST data
        conn.setDoOutput(true);
        var wr = new java.io.OutputStreamWriter(conn.getOutputStream(), this._getCharset());
        wr.write(data);
        wr.flush();
        wr.close();
      }
      // read response headers
      // NOTE: the getHeaderField() methods always return nulls for me :(
      var gotContentEncoding = false;
      var gotContentLength = false;
      var gotContentType = false;
      var gotDate = false;
      var gotExpiration = false;
      var gotLastModified = false;
      for (var i = 0; ; i++)
      {
        var hdrName = conn.getHeaderFieldKey(i);
        var hdrValue = conn.getHeaderField(i);
        if (hdrName == null && hdrValue == null)
        {
          break;
        }
        if (hdrName != null)
        {
          this._headers[this._headers.length] = {h:hdrName, v:hdrValue};
          switch (hdrName.toLowerCase())
          {
            case 'content-encoding': gotContentEncoding = true; break;
            case 'content-length' : gotContentLength = true; break;
            case 'content-type' : gotContentType = true; break;
            case 'date' : gotDate = true; break;
            case 'expires' : gotExpiration = true; break;
            case 'last-modified' : gotLastModified = true; break;
          }
        }
      }
      // try to fill in any missing header information
      var val;
      val = conn.getContentEncoding();
      if (val != null && !gotContentEncoding) this._headers[this._headers.length] = {h:'Content-encoding', v:val};
      val = conn.getContentLength();
      if (val != -1 && !gotContentLength) this._headers[this._headers.length] = {h:'Content-length', v:val};
      val = conn.getContentType();
      if (val != null && !gotContentType) this._headers[this._headers.length] = {h:'Content-type', v:val};
      val = conn.getDate();
      if (val != 0 && !gotDate) this._headers[this._headers.length] = {h:'Date', v:(new Date(val)).toUTCString()};
      val = conn.getExpiration();
      if (val != 0 && !gotExpiration) this._headers[this._headers.length] = {h:'Expires', v:(new Date(val)).toUTCString()};
      val = conn.getLastModified();
      if (val != 0 && !gotLastModified) this._headers[this._headers.length] = {h:'Last-modified', v:(new Date(val)).toUTCString()};
      // read response data
      var reqdata = '';
      var stream = conn.getInputStream();
      if (stream)
      {
        var reader = new java.io.BufferedReader(new java.io.InputStreamReader(stream, this._getCharset()));
        var line;
        while ((line = reader.readLine()) != null)
        {
          if (this.readyState == 2)
          {
            this.readyState = 3;
            if (this.onreadystatechange)
            {
              this.onreadystatechange();
            }
          }
          reqdata += line + '\n';
        }
        reader.close();
        this.status = 200;
        this.statusText = 'OK';
        this.responseText = reqdata;
        this.readyState = 4;
        if (this.onreadystatechange)
        {
          this.onreadystatechange();
        }
        if (this.onload)
        {
          this.onload();
        }
      }
      else
      {
        // error
        this.status = 404;
        this.statusText = 'Not Found';
        this.responseText = '';
        this.readyState = 4;
        if (this.onreadystatechange)
        {
          this.onreadystatechange();
        }
        if (this.onerror)
        {
          this.onerror();
        }
      }
    };
  };
}

// ActiveXObject emulation
if (!window.ActiveXObject && window.XMLHttpRequest)
{
  window.ActiveXObject = function(type)
  {
    switch (type.toLowerCase())
    {
      case 'microsoft.xmlhttp':
        case 'msxml2.xmlhttp':
        case 'msxml2.xmlhttp.3.0':
        case 'msxml2.xmlhttp.4.0':
        case 'msxml2.xmlhttp.5.0':
        return new XMLHttpRequest();
    }
    return null;
  };
}
点此下载ajax.js

(0)

相关推荐

  • AJAX(XMLHttpRequest.status)状态码

    下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET".注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持. timeout Number 设置请求超时时间(毫秒).此设置将覆盖全局设置. async

  • jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML

    摘要:本节补充ajax学习笔记1中 第二种方式:使用XMLHttpRequest对象的responseXML的方式来接受XML数据对象的DOM对象 在ajax学习笔记1中已经对准备工作和需要用到的知识做了比较详细的介绍,本节主要介绍需要修改的代码以及新增的代码 .新增一个servlet类 AJAXXMLServer.java 复制代码 代码如下: import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServle

  • 再谈Jquery Ajax方法传递到action(补充)

    之前写过一篇文章Jquery Ajax方法传值到action,本文是对该文的补充假设 controller中的方法是如下: 复制代码 代码如下: public ActionResult ReadPerson(PersonModel model)          {              string s = model.ToString();              return Content(s);          } public ActionResult ReadPersons

  • Jquery Ajax方法传值到action的方法

    假设cshtml文件中是这样的: 复制代码 代码如下: <script type="text/javascript">        $(document).ready(function(){            $("#btn").click(function(){             $.ajax({                type: 'POST',                url: "/Home/MyAjax"

  • 如何用ajax来创建一个XMLHttpRequest对象

    我每次创建一个对象,都要这样复杂吗?如下代码: JScript code: "testAjax.htm" 文件: 复制代码 代码如下: <html> <body> <script type="text/javascript"> function ajaxFunction() { var xmlHttp; try { // Firefox,Opera 8.0+,Safari xmlHttp=new XMLHttpRequest();

  • ajax 入门基础之 XMLHttpRequest对象总结

    XMLHttpRequest 提供客户端同http服务器通讯的协议 一:创建 IE : http_request = new ActiveXObject("Msxml2.XMLHTTP"); http_request = new ActiveXObject("Microsoft.XMLHTTP"); 非IE: http_request = new XMLHttpRequest(); 二:onreadystatechange 指定当readyState属性改变时的事件

  • Ajax xmlHttpRequest的status的值的含义

    xmlHttpRequest对象的status代表当前http请求的状态,是一个长整型数据,现在介绍一下它的含义. http请求状态及其含义表 1xx - 信息提示 100 - 初始的请求已经接受,客户应当继续发送请求的其余部分.(HTTP 1.1新) 101 - 服务器将遵从客户的请求转换到另外一种协议.(HTTP 1.1新) 2xx - 成功 200 - OK 一切正常,对GET和POST请求的应答文档跟在后面. 201 - Created 服务器已经创建了文档,Location头给出了它的

  • 通过XMLHttpRequest和jQuery实现ajax的几种方式

    示例一:利用Ajax来动态获取时间的例子. HTML代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h

  • AJAX中同时发送多个请求XMLHttpRequest对象处理方法

    在ajax应用中,通常一个页面要同时发送多个请求,如果只有一个XMLHttpRequest对象,前面的请求还未完成,后面的就会把前面的覆盖掉,如果每次都创建一个新的XMLHttpRequest对象,也会造成浪费.解决的办法就是创建一个XMLHttpRequset的对象池,如果池里有空闲的对象,则使用此对象,否则将创建一个新的对象. 下面是我最近写的一个简单的类:* XMLHttpRequest Object Pool * * @author    legend <legendsky@hotmai

  • jquery ajax请求方式与提示用户正在处理请稍等

    初次使用$.ajax() ,我没有去区分过ajax的异步请求和同步请求的不同,刚开始使用同步请求,以至后来出现许多问题,特别在体验度方面. 异步和同步: 同步意味着执行完一段程序才能执行下一段,它属于阻塞模式,其表现在网页上的现象是--浏览器会锁定页面(即所谓的页面假死状态),用户不能操作其它的,必须等待当前请求返回数据.而使用异步方式请求,页面不会出现假死现象. 提升用户体验度: 当用户提交数据等待页面返回结果是需要时间的,有时这段等待时间比较长,为了提高用户体验度,我们通常会给出 "正在处理

  • jQuery ajax调用WCF服务实例

    恩,在由瘦客户端转换成胖浏览器端的"潮流"下,必然要使用JavaScript调用后台的各种服务. 屌丝所维护的产品通信都是使用的WCF服务,因此必然要学习这样的内容.借用jQuery强大的库,使用JavaScript访问WCF服务非常简便.同事研究了一个breeze库,那么屌丝就来试验一下ajax.这里把实现简单地记录以便马克一下,以后忘了就看这篇日志来作弊. 一.更改WCF服务的配置 默认情况下,WCF服务是不允许使用HTTP请求来访问的.我们需要将WCF服务的配置文件(注意如果有其

  • AJAX客户端说明,XMLHttpRequest对象

    在CommunityServer中运用了自己的AJAX机制,没有借助其他的辅助控件.其中客户的XMLHttpRequest对象的封装,就足以让人大饱眼福,在一般的浏览器其都能够运行AJAX.下面我们来学习学习这个咚咚,希望能给更多的人带来帮助. 首先当然是要了解一下浏览器中的XMLHttp对象了: XMLHTTP方法:           备注:客户机可以使用XMLHTTP对象发送任意的HTTP请求,接受HTTP应答,还可以对应答的XML文档进行解析. Open方法:初始化一个Msxml2.XM

  • jquery ajaxSubmit 异步提交的简单实现

    前台js 复制代码 代码如下: $("#nickForm").ajaxSubmit({     type: "post",     url: "http://localhost:8080/test/myspace.do?method=updateNick&param=1",     dataType: "json",     success: function(result){ //返回提示信息            

  • Ajax通讯原理XMLHttpRequest

    显然AJax就是利用JavaScript脚本访问数据的一种技术. AJAX 使网页实现异步更新.这就是在不重新加载整个网页的情况下,对网页进行局部更新. XMLHttpRequest 是 AJAX 的关键 现在浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject). 向后台请求数据readyState有五个状态0:服务器未初始化,1:服务器连接已建立,2请求已接受收,3请求处理中,4请求完成. 每改变一次状态都好触发一次onreadystatec

  • 防止jQuery ajax Load使用缓存的方法小结

    一.用法 jquery的load函数是请求另一个文件并加载到当前DOM里的调用,load方法的完整格式是:load( url, [data], [callback] )(注意没有参数是GET方式请求,有参数则是 POST方法). * url:是指要导入文件的地址. * data:可选参数:因为Load不仅仅可以导入静态的html文件,还可以导入动态脚本,例如PHP文件,所以要导入的是动态文件时,我们可以把要传递的参数放在这里. * callback:可选参数:是指调用load方法并得到服务器响应

  • php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法

    解决方法: 使用服务器作为代理. 在PHP中, 使用我最喜欢的最强大的CURL,嘿嘿 下面是在万网查询域名的实例代码 复制代码 代码如下: <?php $dn = $_GET['dn']; // 域名, 不包括www $ex = $_GET['ex']; // 顶级域名, 如 .com, .cn, 包括最前面的. // 查询域名是否已经注册 $url = 'http://pandavip.www.net.cn/check/check_ac1.cgi'; $ch = curl_init($url)

随机推荐