`
decentway
  • 浏览: 160290 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论
阅读更多

 YUI IO是一个通讯工具,用于数据获取和内容更新,它使用XMLHttpRequest对象来用于“同区域”请求,当用于“跨区域”请求时,使用相反的传输工具。

开始

<script src="http://yui.yahooapis.com/3.3.0/build/yui/yui-min.js"
    charset="utf-8"></script>

 

// Create a new YUI instance and populate it with the required modules.
YUI().use('io', function (Y) {

    // IO is available and ready for use.

});

一个简单的通讯

 io()方法是用于HTTP请求的最主要方法,这个方法接受的两个参数:uri和configuration

uri:这个参数指定通讯的的URI

configuration:这个参数是一个名值对(key value)的对象,它指定通讯的配置。更多的配置参数请参见下面的:The Configuration Object

io()方法返回一个带有下列成员的对象。

id:通讯过程中的唯一标识

abort():终止指定的通讯

isInProgress():放回一个布尔值,指出通讯是否已经完成。

下面是一个GET通讯:

 

使用IO工具

使用io

模块:

配置对象:

事件:

同步请求:

跨域请求:

序列号HTML表单作为数据:

在HTML表单上上传文件:

设置HTTP头部:

队列:

 

模块:

Io的 核心和补充 功能 分为 基本 模块和 子模块,来使得在选择需要的功能时,加入适合的模块。

模块
描述
io-base
基本的io类,包含了使用HTTP请求的基本函数
io-xdr
这个子模块扩展了io-base,使用交替的HTTP通讯,增加了跨区域请求的能力。
io-form
这个子模块扩展了io-base,增加了为POST通讯,序列化HTML表单数据的功能。
io-upload-iframe
这个子模块扩展了io-base,使用一个框架作为交互通讯,允许使用一个HTML表单上传文件。
io-queue
这个子模块扩展了io-base,为io提供一个基本的队列接口

配置对象:

这个对象是io()方法的第二个参数,所有属性是可选的,如下。

 

属性
描述

method

(string)

定义通讯的HTTP方法,如果这个属性没有定义或者忽略的,那么默认的值是GET

data

(string)

如果交互的数据被定义成名值对(如,"foo=bar&baz=boo"),也可以被定义为 a single-level object(例如.{'boo':'bar','baz':'boo'}.),然后被序列化为名值对字符串,为了应用这个功能,子模块querystring-stringify-simple(一个io-base的可选依赖)必须在Y.use()中定义。

headers

(object)

指定交互的HTTP头部和值。(例如,{'Content-Type':'application/xml;charset=utf-8'})

on

(object)

io事件。 These events fire in addition to the global io events(这句话是什么意思?除了全局io事件xxxx)

start:

complete:

success:

failure:

end:

注意:These events are accessible only to the transaction's subscribers, whereas global io events are accessible by all subscribers.?????what意思

context

(object)

定义事件执行内容,如果没有定义,默认的Y(YUI实例)将被使用。

form

(object)

这个对象指明使用指定HTML表单的标签和值作为数据。

id:这个属性可以被定义为一个HTML表单的id(sting)或者是一个HTML表单对象引用。

useDisable:设置为true时,禁用区域的值被包含,作为数据的一部分。默认值为flase。

xdr

(object)

Defines the transport to be used for cross-domain requests (e.g.,  { use:'flash' }   ). The transaction will use the specified transport instead of the default transport, when specified in the transaction's configuration object.

use:这个属性指定传输的方式;io-xdr模块提供"native"和"flash"方式。

dataType:当被设置为“xml”时,io将返回XML文档。

sync

(boolean)

当被设置为true,交互将被同步执行

arguments

(object)

可以是对象,数组,字符串或者是数字。在"start"和"end"处理器中是第二个参数,在"complete","success"和"failure"事件处理器中是第三个参数。
timeout
这个值是交互的事件截至值,单位是毫秒。例如({timeout:2000}).当这个时间限制到了之后,交互的Complete事件还没有激发时,这次交互将被取消。

 

    响应对象

当一个交互,以XHR对象作为传输工具,响应的数据将作为一个事件处理的对象被传递。

字段 描述
status HTTP状况码
statusText HTTP状况信息
getResponseHeader(headername) 返回指定的头部标号的字符串值
getAllResponseHeaders() 返回所有的HTTP 头部作为一个字符串。每一个名值对都以"\n“定界。
responseText 响应数据作为一个解码字符串。
responseXML 响应数据作为一个XML文件。

注意:涉及到文件上传或者是跨域请求的交互,使用alternate transports,将仅仅populate responseText或者responseXML域。HTTP status和响应头部(response headers)要么是不可取的(inaccessible)要么是无效的。

 

事件:

两种事件区别不清楚。global 和Transaction。global event,全局事件?;Transaction event 事务事件?

YUI io事件提供了在事务处理(翻译成交互准确不?)过程中获取状态和数据的功能。有两个方面的io事件:global 和transaction。对于所有的事务处理,global event总是被io激发,并且这些事件对所有的订阅者(subscribers)都是有效的。如果它们有定义在Configuration 对象的句柄(handlers),则Transaction events 被创建并激发。global event 的定义结构为:io:eventname 。

以下是subscribe Globle event的例子。

 

事件 描述
io:start

当请求一个资源是被激发。事件句柄参数签名是:

function onStart(transactionid, arguments) {
  // transactionid : The transaction's ID.
  // arguments: Array ['foo','bar'].
}

// Subscribe to "io.start".
Y.on('io:start', onStart, Y, { start: ['foo','bar']; );
 
io:complete

当交互完成了,响应的数据有效了,在io:start之后被激发。这是获得响应数据的最早时刻,事件句柄参数签名是:

function onComplete(transactionid, response, arguments) {
  // transactionid : The transaction's ID.
  // response: The response object.
  // arguments: Object containing an array { complete: ['foo', 'bar'] }.
}

// Subscribe to "io.complete".
Y.on('io:complete', onComplete, 
            Y, { complete: ['foo', 'bar'] } );
 
io:success

在complete之后激发,(when hte response HTTP status resolves to 2xx????),事件句柄参数签名是:

function onSuccess(transactionid, response, arguments) {
  // transactionid : The transaction's ID.
  // response: The response object.
  // arguments: Boolean value "true".
}

// Subscribe to "io.success".
Y.on('io:success', onSuccess, Y, true);
 
io:failure

在complete之后激发,(when the response HTTP status resolves to 4xx. 5xx,未定义,或者是一个非标准的HTTP状态。大概意思是,比如什么404错误值了的 )。这个事件也包含‘abort’和‘timeout’情况,事件句柄参数签名是:

function onFailure(transactionid, response, arguments) {
  // transactionid : The transaction's ID.
  // response: The response object.  Only status and 
  //           statusText are populated when the 
  //           transaction is terminated due to abort 
  //           or timeout.  The status will read
  //           0, and statusText will return "timeout" 
  //           or "abort" depending on the mode of 
  //           termination.
  // arguments: String "Transaction Failed".
}
// Subscribe to "io.failure".
Y.on('io:failure', onFailure, Y, 'Transaction Failed');

 

io:end

在交互结束时激发,在”success“或者”failure“被确定之后,

function onEnd(transactionid, arguments) {
  // transactionid : The transaction's ID.
  // arguments: Number 0.
}

// Subscribe to "io.end".
Y.on('io:end', onEnd, Y, 0);
 
io:xdrReady 在flash XDR 传送准备使用时激发。当transport初始化完成时,这个事件仅仅激发一次

下面的例子证实一个io 交互,这个交互带有订阅到(subscribe to)io:complete上的事件句柄。
// Create a YUI instance using io module.
YUI().use("io-base", function(Y) {
	/*
	 * 为事件"io:complete"创建一个函数作为事件句柄。
	 *
	 * 这个函数将接受以下参数:
	 * - ID:The ID of the transaction
	 * - response data:Object containing the response data.
	 * - Argument one defined when subscribing to the event(e.g., "foo").
	 * - Argument two defined when subscribing to the event(e.g., "bar").
	 */
	function onComplete(transactionId, responseObject, arg1, arg2) {
		/*
		 * 参数responseObject是响应对象,它提供的属性包括:
		 * - status
		 * - statusText
		 * - getResponseHeader(headerName)
		 * - getAllResponseHeaders
		 * - responseText
		 * - responseXML
		 *
		 * 注意:一个XDR交互中,只有responseText或者responseXML是被定义的属性。
		 */
	};

	/*
	 * 使用Y.on订阅到事件io:complete
	 *
	 * - 'io:complete' : 订阅到这个io事件
	 * - onComplete : 将被定义到io:complete上的事件句柄。
	 * - Y : 事件句柄执行的内容,在这个例子中,theYUI sandbox???(什么意思?)。因为onComplete被定义为一个全局函数。
	 *       
	 * - 'foo' : The first argument received by the event handler.
	 * - 'bar' : The second argument received by the event handler.
	 *           Additional arguments can be defined, as desired.
	 */
	Y.on('io:complete', onComplete, Y, "foo", "bar");

	// Starts the transaction.
	var request = Y.io(uri);
});


 

同步事务:

对于同域请求,YUI io可以被指明来发送一个同步请求,它将停止所有的脚本执行,直到transaction完成。当transaction完成,响应数据are directly accessible through the object returned by Y.io(), and the data are also accessible through all io events。当使用同步请求,abort()和isInProgress()无效。

// Create a YUI instance using the io-base module.
YUI().use("io-base", function(Y) {
	var cfg,
		request;
	// Create a configuration object for the synchronous transaction.
	cfg = {
		sync: true,
		arguments: { 'foo' : 'bar' }
	};

	/*
	 * var request will contain the following fields, when the
	 * transaction is complete:
	 * - id
	 * - status
	 * - statusText
	 * - getResponseHeader()
	 * - getAllResponseHeaders()
	 * - responseText
	 * - responseXML
	 * - arguments
	 */
	request = Y.io(uri, cfg);
});
 

跨域请求:

alternate transport 是什么?

交互方式

默认:XMLHttpRequest

也可以用:flash

 

这块不会,请高手指教。

序列号HTML表单作为数据:

YUI io能够序列化HTML表单域到一个UTF-8字符串,名值对。如果transaction是HTTP GET,数据将作为查询字符串加到URI上,如果transaction是HTTP POST ,数据将为POST信息。

// Create a YUI instance using the io-form sub-module.
YUI().use("io-form", function(Y) {
	// Create a configuration object for the file upload transaction.
	// The form configuration should include two defined properties:
	// id: This can be the ID or an object reference to the HTML form.
	// useDisabled: Set this property to "true" to include disabled
	//              HTML form fields, as part of the data.  By
	//              default, disabled fields are excluded from the
	//              serialization.
	// The HTML form data are sent as a UTF-8 encoded key-value string.
	var cfg = {
		method: 'POST',
		form: {
			id: formObject,
			useDisabled: true
		}
	};

	// Define a function to handle the response data.
	function complete(id, o, args) {
	  var id = id; // Transaction ID.
	  var data = o.responseText; // Response data.
	  var args = args[1]; // 'ipsum'.
	};

	// Subscribe to event "io:complete", and pass an array
	// as an argument to the event handler "complete".
	Y.on('io:complete', complete, Y, { 'foo':'bar' });

	// Start the transaction.
	var request = Y.io(uri, cfg);
});
 

在HTML表单中上传文件:

The default XHR transport, used in io, cannot upload HTML form data that include elements of type="file". In this situation, io will use an alternate transport -- an iframe -- to facilitate the transaction. The response data must be one of the following content types: "text/html", "text/plain", "text/xml". The following example shows how to configure a transaction involving file upload:

 

设置HTTP头部:

YUI().use("io-base", function(Y) {

	// 设置一个新的HTTP头部。Set a new default HTTP header.
	Y.io.header('Content-Type', 'application/json');

	// 移除一个已经存在的头部,使用相同的方法,但忽略它的值。
	Y.io.header('Content-Type');
});
 

队列:

 

FIELD 描述
queue(uri,configuration) 同io交互,但返回值为id
queue.start() 启动队列,开始处理交互。
queue.stop() 停止队列,交互将被停止的,知道队列从新启动re-start
queue.promote(id) 移动队列中存储的指定交互到队首
queue.remove(id) 删除指定的交互。
// Create a YUI instance using the io queue sub-module.
//比较简单,不翻译了。
YUI().use("io-queue", function(Y) {

	// Stop the queue so transactions can be stored.
	Y.io.queue.stop();

	// Send four transactions into the queue for storage.
	var task0 = Y.io.queue(uri);
	var task1 = Y.io.queue(uri);
	var task2 = Y.io.queue(uri);
	var task3 = Y.io.queue(uri);

	// Promote task2 to the top of the queue.
	Y.io.queue.promote(task2);

	// Purge task3 from the queue.
	Y.io.queue.purge(task3);

	// Re-start the queue.
	// Transactions are sent in the following order: task2, task0, task 1.
	// Transaction callbacks, if provided, will be processed in the same
	// sequence: task2, task0, task1, regardless of actual response order.
	//
	Y.io.queue.start();
}); 

安全公告
已知的问题

 

分享到:
评论

相关推荐

    yui3-master.zip

    《深入理解YUI3:基于yui3-master.zip的探讨》 YUI(Yahoo! User Interface Library)是由雅虎公司开发的一套开源JavaScript库,它为Web开发者提供了丰富的功能和工具,以创建交互性强、性能优秀的网页应用。YUI3是...

    yui 资源包

    3. **事件处理**:YUI的事件系统强大,支持事件绑定、解绑、事件冒泡等,使得用户交互编程简单易行。 4. **动画效果**:通过Transition和Anim模块,可以轻松实现平滑的CSS3动画和JavaScript动画效果。 5. **数据绑定...

    YUI3.7.3 最新版本 带API

    5. **IO模块**:YUI3的IO模块支持Ajax请求,包括GET、POST等多种HTTP方法,以及异步请求和JSONP跨域数据获取。 6. **动画模块**:YUI3的动画模块可以轻松创建复杂的动画效果,支持CSS属性、颜色、尺寸等多方面的...

    yui3-3.17.2最新版

    YUI 3包含了一系列核心模块,如Event(事件处理)、Node(DOM操作)、IO(异步数据交互)等,同时还有许多可选的组件,如Grids(表格)、Charts(图表)、Form(表单元素)等,覆盖了前端开发的多个方面。...

    YUI3.6文档及示例

    1. **模块系统**:YUI3引入了模块化设计,允许开发者按需加载组件,降低页面的初始化时间。模块可以通过`YUI.use()`方法来加载,实现了代码的异步加载和依赖管理。 2. **事件系统**:YUI的事件处理机制强大且灵活,...

    yui_3.0.0(雅虎官方)

    6. **异步通信和Ajax**:YUI的IO组件提供了异步请求功能,支持JSONP、XMLHttpRequest等多种方式,便于与服务器进行数据交互。 7. **DOM操作和选择器**:YUI提供了强大的DOM操作接口,包括元素的选择、遍历、创建和...

    YUI2 库与例子都有了

    7. **IO(Input/Output)**:YUI2的IO模块支持异步数据请求,包括AJAX、JSONP、以及文件上传,帮助开发者与服务器进行数据交换。 8. **拖放(Drag & Drop)**:YUI2的拖放功能使得用户可以轻松实现元素的拖放操作,...

    yui 3.1.2 源码 6MB大小 0资源分

    YUI 3的设计目标是模块化和轻量化,它引入了模块系统,使得开发者可以根据需要只加载必要的组件,从而降低页面加载时间。在3.1.2版本中,这一特性得到了充分的体现。源码中的每个模块都是独立的,通过AMD...

    YAHOO YUI3简单入门

    YUI3的`IO`模块负责处理Ajax通信,可以进行GET和POST请求,支持异步传输和XMLHttpRequest2特性。同时,YUI3的`JSONP`模块则用于跨域数据获取,这对于获取服务器上的JSON数据非常有用。 **响应式设计** 虽然YUI3...

    yui_2.6.0r2

    - IO:处理异步文件读写,提供了文件上传和下载功能。 - JSON:JSON对象的序列化和反序列化,便于数据交换。 - Calendar:日历组件,可以方便地集成到网页中,用于日期选择。 - Drag and Drop:拖放功能,使得用户...

    雅虎YUI组建

    **3. JavaScript组件** - **Event**: 事件处理模块,支持DOM事件的监听、处理和移除,提供了一套跨浏览器的事件系统。 - **Node**: Node模块提供了对DOM节点的操作,如选择、创建、修改和删除等,简化了DOM操作。 - ...

    yui_3.8.1.zip

    3. **CSS样式和布局**:YUI包含一套响应式设计的CSS框架,如Grids布局系统,帮助开发者快速创建响应式的网页布局。 4. **数据管理**:YUI提供了Model、ModelList和Store等组件,用于数据的存储、管理和同步,与...

    Yahoo YUI 插件库

    3. **拖放功能**:YUI的DragDrop模块提供了强大的拖放功能,使得用户可以轻松地在页面上移动元素,这对于构建交互式应用非常关键。 4. **日期和时间选择器**:YUI Calendar组件提供了一个用户友好的日历界面,可以...

    YUI js方法使用列子

    3. **Event(事件)**:YUI的事件系统支持事件监听、事件代理和事件分发,使得事件处理更加高效和灵活。 4. **Animation(动画)**:提供了平滑的CSS和属性动画,可以创建各种复杂的过渡效果。 5. **DataSource...

    前端项目-yui.zip

    6. **IO和Ajax**:YUI 3 支持异步数据交互,提供了XMLHttpRequest的封装,方便开发者进行Ajax请求,实现前后端数据的通信。 7. **JSON和XML处理**:YUI 3 提供了处理JSON和XML数据的工具,方便在JavaScript中解析和...

    yui_2.5.2 类库

    3. **源码分析** YUI 2.5.2的源码可以深入了解其内部实现机制,对于学习JavaScript编程和优化性能非常有帮助。通过阅读源码,开发者可以学习到如何组织代码结构,以及如何设计高效的API接口。 4. **说明文档** ...

    针对YUI框架API

    3. **DOM操作** Node模块提供了便捷的DOM操作接口,可以快速地选取、创建、修改DOM元素,增强了JavaScript对HTML文档的操作能力。 4. **CSS样式管理** YUI的StyleSheet模块允许开发者动态修改CSS样式,实现页面...

    yui最新版,api example docs

    1. **模块**:YUI由多个模块组成,如Core(核心)、Event(事件)、Node(DOM节点操作)、IO(异步数据请求)等。每个模块都提供了一组相关功能。 2. **类**:每个模块下有若干个类,这些类定义了对象的行为和属性...

    Yahoo JavaScript库 YUI源码

    3. **初始化YUI**:调用`YUI().use()`方法初始化YUI,并传入需要的模块。 4. **编写代码**:在回调函数中编写具体的应用逻辑,使用YUI提供的API。 **四、YUI与其他JavaScript库的比较** YUI与jQuery、Dojo、...

    yui详细教程,适合新人

    &lt;script src="http://yui.yahooapis.com/3.x.x/build/yui/yui-min.js"&gt;&lt;/script&gt; YUI().use('node', function (Y) { // 在这里编写你的代码,此时Y对象包含了node模块的所有功能 }); ``` ### 4. 学习路径 ...

Global site tag (gtag.js) - Google Analytics