手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >跨浏览器的设置innerHTML方法
跨浏览器的设置innerHTML方法
摘要:Ajax是个好东西,但使用起来却不是那么方便。问题总结如下:在各种浏览器上的创建方式和使用方法不一致各个浏览器对响应的缓存策略有所不同浏览器...

Ajax是个好东西,但使用起来却不是那么方便。问题总结如下:

在各种浏览器上的创建方式和使用方法不一致

各个浏览器对响应的缓存策略有所不同

浏览器存在跨域获取限制

前两个问题可以通过封装XMLHTTPRequest对象来解决,第三个问题的解决方法有很多中,兼容性和移植性比较好的就是在本域服务器上放置一个中转proxy。Modello.ajax就是提供这套解决方案的工具集。

安装

下载Modello和Mdello.ajax

解压并将modello.js,modello.ajax.js,jsproxy.php这三个文件放到你的服务器任意文档目录中

在html页面中包含modello.js和modello.ajax.js这两个脚本文件

urlget方法

Modello.ajax使用起来非常的简单,请看下面例子:

//设置跨域中转proxy路径Define('URLGET_PROXY','/jsproxy.php');//强大的urlget方法varurlget=Class.get('modello.ajax.Urllib').urlget;varurl='...';//同步GET方法获取varresponse=urlget(url);//同步POST方法获取vardata='...';varresponse=urlget(url,data);//异步POST方法获取varcallback=function(response){//...}varret=urlget(url,data,callback);//设置请求头部varheaders=["User-Agent:Modello.ajax'surlget"];varret=urlget(url,data,callback,headers);//使用命名通道varchunnel='...';varret=urlget(url,data,callback,headers,chunnel);//使用Response对象if(response.getStatus()==200){alert(response.getText());}//设置跨域中转proxy路径

Define('URLGET_PROXY','/jsproxy.php');

//强大的urlget方法

varurlget=Class.get('modello.ajax.Urllib').urlget;

varurl='...';

//同步GET方法获取

varresponse=urlget(url);

//同步POST方法获取

vardata='...';

varresponse=urlget(url,data);

//异步POST方法获取

varcallback=function(response){

//...

}

varret=urlget(url,data,callback);

//设置请求头部

varheaders=["User-Agent:Modello.ajax'surlget"];

varret=urlget(url,data,callback,headers);

//使用命名通道

varchunnel='...';

varret=urlget(url,data,callback,headers,chunnel);

//使用Response对象

if(response.getStatus()==200){

alert(response.getText());

}

urlget各个参数的解释如下:

url:目标资源的URL地址。

data:POST数据。如果data为空,则使用GET方法获取。

callback:异步获取回调函数。如果callback为空,则使用同步获取。

headers:附加请求头部。这是一个数组,每一项为字符串,设置一行头部,字符串末尾不可以带回车换行。

chunnel:命名通道。用于重用某个连接通道。

urlget的返回值:

如果是同步获取,成功返回Response对象,失败返回false。如果是异步获取,成功返回true,并且在获取后调用回调函数,失败返回false。如果指定了命名通道,但该通道正在被其它请求占用,同步、异步都统一返回false。

回调函数的参数:

response:Response对象。

chunnel:调用时指定的命名通道。

Response对象

Response对象用于访问响应的各个数据项。它提供接口如下:

response.getStatus();//HTTP响应码(整数)response.getStatusText();//响应码的字面解释response.getHeader(key);//由key指定的响应的头部数据response.getAllHeaders();//响应的所有头部数据(不包含状态行)response.getRawHeader();//响应的原样头部数据(包含状态行)response.getText();//响应的体部数据response.getXML();//响应的体部数据格式化为XmlDocument对象response.getStatus();//HTTP响应码(整数)

response.getStatusText();//响应码的字面解释

response.getHeader(key);//由key指定的响应的头部数据

response.getAllHeaders();//响应的所有头部数据(不包含状态行)

response.getRawHeader();//响应的原样头部数据(包含状态行)

response.getText();//响应的体部数据

response.getXML();//响应的体部数据格式化为XmlDocument对象

大部分情况下,使用urlget函数足可以应付,并且它是可以跨浏览器,跨域使用的。如果你想做一些更底层的操作,Modello.ajax为你提供两个跨浏览器使用的基类:Connection和Request

Connection类

这是一个静态类,提供跨浏览器的方法返回一个XMLHTTPRequest对象。使用方法如下:

/**成功返回一个跨浏览器版本的XMLHTTPRequest对象,*失败返回null。*/varconn=Class.get('modello.ajax.Connection').get();/*

*成功返回一个跨浏览器版本的XMLHTTPRequest对象,

*失败返回null。

*/

varconn=Class.get('modello.ajax.Connection').get();

Request类

这是对XMLHTTPRequest对象的封装,提供更加易用的接口并解决浏览器对响应缓存的问题,但不具备跨域获取功能。Request提供的属性和方法如下:

/**类的路径*/varRequest=Class.get('modello.ajax.Request');/**创建实例*url,method,data均为可选参数*/varrequest=newRequest([url[,method[,data]]]);/**设置URL*/request.setURL(url);/**设置获取方法。目前支持:GET,POST,HEAD*/request.setMethod(method);/**设置获取方法。目前支持:GET,POST,HEAD*/request.setData(data);/**设置回调函数*回调函数的原型为:*varcallback=function(response){};*/request.setHandler(handler);/**设置请求头部*/request.setHeader(key,value);/**增加请求头部*/request.addHeader(header);/**发送请求*async为true,使用异步方式*默认使用同步方式*调用成功,同步方式返回response对象,异步方式返回true*调用失败,统一返回false*/request.open([async]);/**查询当前请求的状态*返回一个字符串描述,可能为:*Uninitialized:未初始化*Loading:初始化*Loaded:发送数据*Interactive:数据传送中*Complete:完成*/request.getState();/**返回当前使用的Connection对象*/request.getConnection();/**返回Response对象*如果当前的请求状态不为Complete,返回null*/request.getResponse();/**中止当前请求*/request.abort();/**清理所有请求头部*/request.reset();/**除了上面的方法,还可以对Request对象设置事件处理函数*总共有下面几种事件*/request.onException=function(){};request.onLoading=function(){};request.onLoaded=function(){};request.onInteractive=function(){};request.onComplete=function(){};/*

*类的路径

*/

varRequest=Class.get('modello.ajax.Request');

/*

*创建实例

*url,method,data均为可选参数

*/

varrequest=newRequest([url[,method[,data]]]);

/*

*设置URL

*/

request.setURL(url);

/*

*设置获取方法。目前支持:GET,POST,HEAD

*/

request.setMethod(method);

/*

*设置获取方法。目前支持:GET,POST,HEAD

*/

request.setData(data);

/*

*设置回调函数

*回调函数的原型为:

*varcallback=function(response){};

*/

request.setHandler(handler);

/*

*设置请求头部

*/

request.setHeader(key,value);

/*

*增加请求头部

*/

request.addHeader(header);

/*

*发送请求

*async为true,使用异步方式

*默认使用同步方式

*调用成功,同步方式返回response对象,异步方式返回true

*调用失败,统一返回false

*/

request.open([async]);

/*

*查询当前请求的状态

*返回一个字符串描述,可能为:

*Uninitialized:未初始化

*Loading:初始化

*Loaded:发送数据

*Interactive:数据传送中

*Complete:完成

*/

request.getState();

/*

*返回当前使用的Connection对象

*/

request.getConnection();

/*

*返回Response对象

*如果当前的请求状态不为Complete,返回null

*/

request.getResponse();

/*

*中止当前请求

*/

request.abort();

/*

*清理所有请求头部

*/

request.reset();

/*

*除了上面的方法,还可以对Request对象设置事件处理函数

*总共有下面几种事件

*/

request.onException=function(){};

request.onLoading=function(){};

request.onLoaded=function(){};

request.onInteractive=function(){};

request.onComplete=function(){};

jsproxy

对于跨域调用,Modello.ajax采用在本域服务器设置一个中转proxy的方式。使用proxy方式可以不用对个别浏览器进行特殊设置,不用依赖具体的服务器,并且具备扩展能力等优点。随Modello.ajax工具集提供的proxy用php写成,可运行php的服务器都可以安装。proxy也可以用其它语言编写,Modello.ajax有计划在后续版本中提供python版的jsproxy。下面来描述jsproxy的设计,有需要的朋友可以参考来实现其它语言版本的jsproxy。

jsproxy接收三个POST参数:url,data,headers。url为目标资源的URL地址;data为POST数据,如果为空则使用GET方法获取资源;headers附加的请求头部数据。jsproxy根据这些参数去获取目标资源,然后将收到的响应头部和响应体部全部转发给请求者。jsproxy收到的参数是由Modello.ajax发出的,字符集为UTF-8,处理的时候要注意这点。jsproxy获取到的响应的字符集有很多种可能的,在转发响应之前jsproxy应该自动检测出当前响应的字符集,并在转发的响应头部指明。如果忽律这个步骤,请求者收到的响应有可能是乱码。

urlparse,urljoin函数

urlparse,urljoin这样的URL处理函数在其它脚本语言中很常见,但在JavaScript中却没有。Modello.ajax提供了这两个函数,前面提到的urlget函数内部就使用了这两个函数。下面来解释他们的用法:

/**urlparse:URL分析函数*/varurl='http://user:pass@host:port/path?query#flagment';varret=Class.get('modello.ajax.Urllib').urlparse(url);//这时候//ret.user=='user'//ret.pass=='pass'//ret.host=='host'//ret.post=='post',默认为80//ret.path=='path',以'/'开头//ret.query=='query'//ret.flagment=='flagment'/**urljoin:合并两个URL*/varurl1='http://www.example.com/about/about.html';varurl2='/index.html';varurl=Class.get('modello.ajax.Urllib').urljoin(url1,url2);//这时候//url=='http://www.example.com/index.html'/*

*urlparse:URL分析函数

*/

varurl='http://user:pass@host:port/path?query#flagment';

varret=Class.get('modello.ajax.Urllib').urlparse(url);

//这时候

//ret.user=='user'

//ret.pass=='pass'

//ret.host=='host'

//ret.post=='post',默认为80

//ret.path=='path',以'/'开头

//ret.query=='query'

//ret.flagment=='flagment'

/*

*urljoin:合并两个URL

*/

varurl1='http://www.example.com/about/about.html';

varurl2='/index.html';

varurl=Class.get('modello.ajax.Urllib').urljoin(url1,url2);

//这时候

//url=='http://www.example.com/index.html'

总结

Modello.ajax提供的所有东西已经描述完毕,希望它能帮助你加速Ajax应用的开发;)

【跨浏览器的设置innerHTML方法】相关文章:

JS实现兼容各浏览器解析XML文档数据的方法

javascript动态创建链接的方法

解析Node.js异常处理中domain模块的使用方法

js中跨域方法原理详解

简单实用的网页表格特效

JavaScript实现鼠标拖动效果的方法

js动态创建及移除div的方法

js获取滚动距离的方法

js比较日期大小的方法

JavaScript获得指定对象大小的方法

精品推荐
分类导航