Ajax跨域工具: Modello.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 方法
var urlget = Class.get('modello.ajax.Urllib').urlget;
var url = '…';
// 同步 GET 方法获取
var response = urlget(url);
// 同步 POST 方法获取
var data = '…';
var response = urlget(url, data);
// 异步 POST 方法获取
var callback = function (response) {
// …
}
var ret = urlget(url, data, callback);
// 设置请求头部
var headers = [\"User-Agent: Modello.ajax's urlget\"];
var ret = urlget(url, data, callback, headers);
// 使用命名通道
var chunnel = '…';
var ret = urlget(url, data, callback, headers, chunnel);
// 使用 Response 对象
if (response.getStatus() == 200) {
alert(response.getText());
}// 设置跨域中转 proxy 路径
Define('URLGET_PROXY', '/jsproxy.php');
// 强大的 urlget 方法
var urlget = Class.get('modello.ajax.Urllib').urlget;
var url = '…';
// 同步 GET 方法获取
var response = urlget(url);
// 同步 POST 方法获取
var data = '…';
var response = urlget(url, data);
// 异步 POST 方法获取
var callback = function (response) {
// …
}
var ret = urlget(url, data, callback);
// 设置请求头部
var headers = [\"User-Agent: Modello.ajax's urlget\"];
var ret = urlget(url, data, callback, headers);
// 使用命名通道
var chunnel = '…';
var ret = urlget(url, data, callback, headers, chunnel);
// 使用 Response 对象
if (response.getStatus() == 200) {
alert(response.getText());
}
Define('URLGET_PROXY', '/jsproxy.php');
// 强大的 urlget 方法
var urlget = Class.get('modello.ajax.Urllib').urlget;
var url = '…';
// 同步 GET 方法获取
var response = urlget(url);
// 同步 POST 方法获取
var data = '…';
var response = urlget(url, data);
// 异步 POST 方法获取
var callback = function (response) {
// …
}
var ret = urlget(url, data, callback);
// 设置请求头部
var headers = [\"User-Agent: Modello.ajax's urlget\"];
var ret = urlget(url, data, callback, headers);
// 使用命名通道
var chunnel = '…';
var ret = urlget(url, data, callback, headers, chunnel);
// 使用 Response 对象
if (response.getStatus() == 200) {
alert(response.getText());
}// 设置跨域中转 proxy 路径
Define('URLGET_PROXY', '/jsproxy.php');
// 强大的 urlget 方法
var urlget = Class.get('modello.ajax.Urllib').urlget;
var url = '…';
// 同步 GET 方法获取
var response = urlget(url);
// 同步 POST 方法获取
var data = '…';
var response = urlget(url, data);
// 异步 POST 方法获取
var callback = function (response) {
// …
}
var ret = urlget(url, data, callback);
// 设置请求头部
var headers = [\"User-Agent: Modello.ajax's urlget\"];
var ret = urlget(url, data, callback, headers);
// 使用命名通道
var chunnel = '…';
var ret = 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(); // 响应的体部数据格式化为 Xml Document 对象response.getStatus(); // HTTP 响应码(整数)
response.getStatusText(); // 响应码的字面解释
response.getHeader(key); // 由 key 指定的响应的头部数据
response.getAllHeaders(); // 响应的所有头部数据(不包含状态行)
response.getRawHeader(); // 响应的原样头部数据(包含状态行)
response.getText(); // 响应的体部数据
response.getXML(); // 响应的体部数据格式化为 Xml Document 对象
大部分情况下,使用 urlget 函数足可以应付,并且它是可以跨浏览器,跨域使用的。如果你想做一些更底层的操作,Modello.ajax 为你提供两个跨浏览器使用的基类:Connection 和 Request
Connection 类
这是一个静态类,提供跨浏览器的方法返回一个 XMLHTTPRequest 对象。使用方法如下:
免责声明:本站数据全部由蜘蛛程序自动抓取而来,且仅提供文章链接及部分摘要信息,文章所持观点和本站无关,请点击原文链接查看原作者和出处!