传递回调 我们首先要考虑的一个问题是,如何传递回调入口。在最传统的XHR调用当中,回调函数会被作为最后一个参数传递给异步函数: 代码如下:function asyncOperation(argument, callback) 在参数相当多的时候,我们可以把参数放到一个JSON里面,这样参数就如同具名参数一样,可以通过参数名选择性的传递参数,不传递的参数相当于使用默认值。这是从Prototype开始就流行起来的做法: 代码如下:function asyncOperation(argument,...
问题 在Ajax应用中,调用XMLHttpRequest是很常见的情况。特别是以客户端为中心的Ajax应用,各种需要从服务器端获取数据的操作都通过XHR异步调用完成。然而在单线程的JavaScript编程中,XHR异步调用的代码风格实在是与一般的JavaScript代码格格不入。 额外参数 考虑一个除法函数,如果它是纯客户端的同步函数,那么签名会是这样的: function divide(operand1, operand2) 然而假设我们对客户端除法的精度不满意,于是把除法转移到服...
类结构 首先我们来搭一个架子,把需要用到的似有变量都列出来。我们需要一个数组,来保存回调函数列表;需要一个标志位,来表示异步操作是否已完成;还可以学IAsyncResult,加一个state,允许异步操作的实现者对外暴露自定义的执行状态;最后加一个变量保存异步操作结果。 代码如下:Async = { Operation: { var callbackQueue = []; this.result = undefined; this.state = "waiting"; this.completed = false; } } addCallback方...
现实开发中,要按顺序执行一系列的同步异步操作又是很常见的。还是用百度Hi网页版中的例子,我们先要异步获取联系人列表,然后再异步获取每一个联系人的具体信息,而且后者是分页获取的,每次请求发送10个联系人的名称然后取回对应的具体信息。这就是多个需要顺序执行的异步请求。 为此,我们需要设计一种新的操作方式来优化代码可读性,让顺序异步操作代码看起来和传统的顺序同步操作代码一样优雅。 传统做法 大多数程序员都能够很...
调用入口 链式调用存在Async.go方法和Async.chain方法两个入口,这两个入口本质上是一致的,只是Async.chain方法在调用时先不提供初始参数,而Async.go方法在调用时提供了初始参数并启动异步调用链。 代码如下:Async.chain = function() { var chain = new Async.Operation({ chain: true }); return chain; }; Async.go = function(initialArgument) { return Async.chain().go(initialArgument); } 在这里我们可以看到,链式调...
封装Ajax 设计Async.Operation的最初目的就是解决Ajax调用需要传递callback参数的问题,为此我们先把Ajax请求封装为Async.Operation。我在这里使用的是jQuery,当然无论你用什么基础库,在使用Async.Operation时都可以做这种简单的封装。 代码如下:var Ajax = {}; Ajax.get = function(url, data) { var operation = new Async.Operation(); $.get(url, data, function(result) { operation.yield(result); }, "json"); return op...
原始代码:(在ie中正常,火狐中根本不运行window.parent这一步) 代码如下:<script> function oa_tool1(){ window.parent.mm.rows="20,200,10,*"; } </script> 修改代码:(在ie和火狐当中均正常) 代码如下:<script> function oa_tool1(){ window.parent.document.getElementById("mm").rows="20,200,10,*"; } </script> 原因: 从原则上来讲,修改后的代码是正确的代码,原始代码是一种错误代码,只不过因为ie的容错能力强,...
/**************************************************************************************** 作者:萧 枫 QQ:77182997 MSN:xiaofengnet@hotmail.com Email:xiaofengnet@163.com 网址:http://www.d369.net 请保留版权 谢谢合作 版本:V 1.6.1 /***************************************************************************************** /* 为XiaoFeng.System添加一方法Scroll [2009-02-18] V 1.4.1 为Array添加一方法Inde...
1. SproutCoreSproutCore 苹果对SproutCore的解释为“开源,平台无关,类Cocoa的JavaScript框架,用于创建具有桌面应用程序外观和操作感的Web应用程序。” SproutCore demonstrations: Photos, Sample Controls 2. SprySpry 是Adobe 的 Ajax framework. Spry的目的是成为实现Ajax的一种简单方式,对HTML、CSS和JavaScript体验据有入门级水平的设计人员应该能够发现Spry是一种整合内容的简单方法。 Spry demonstrations: Photo Ga...
代码如下:/* * Copyright VeryIDE,2007-2008 * http://www.veryide.com/ * * $Id: veryide.library.js,v2.3 17:29 2008-11-16 leilei $ */ function $(obj){return document.getElementById(obj);} function $N(obj){return document.getElementsByName(obj);} function $T(obj){return document.getElementsByTagName(obj);} function $V(str){document.write(str);} //body load function addLoadEvent(func) { var oldonload = ...
面以三个页面分别命名为framedemo.html,top.html,button.html为例来具体说明如何做。 其中framedemo.html由上下两个页面组成,代码如下: 代码如下:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> frameDemo </TITLE> </HEAD> <frameset rows="50%,50%"> <frame name=top src="top.html"> <frame name=button src="button.html"> </frameset> </HTML> 现在假设top.html即上面的页面有一个...
1.由于Dojo的每一个版本变化都比较大。 2.Dojo更新都比较快,基本上是1--2个月一个新的版本。 3.Dojo有很多不完善的地方,在实际应用中如果自己不修改代码,要实现自己想要的全部功能是不可能的。 建议开发框架如下 root -dojo -dijit -dojox _padesk _dojo _dijit _dojox _util 也就是新建一个目录padesk(示例,可以自己选),在padesk目录下新建dojo、dijit、dojox目录,把自己需要修改后才能使用的组件放到相应的目录下: 例如...
框架刷新 window.parent.frames["bottom"].location.reload();
它在一定程度上改变了传统的 JavaScript 编程风格。 它还能识别 CSS 代码,它增加了 DOM 方法,扩展了 String 与 Array 原型对象,模拟 StringBuffer、NameSpace 类,支持操作 Cookie,浏览器检测。 当然,Ajax 还是它的强项,$ 函数支持的 CSS 选择符也不弱 …… myJSFrame.jsapi.htm帮助手册
我的时间不多,大部分是在工作之余写的。 代码如下:JObj.Dom.$tag("INPUT") .$filter(function(o){ var fa = o.parentNode.parentNode.parentNode; return f =(o.type == "text" && fa.id == "hollerNew") ? true : false; }) .$css({width:"570px",height:"18px",lineHeight:"18px"}) .$attr({className:"hollerFormNormal"}) .$event({ onfocus:"vControl('TEXTFOCUS',this)", onblur:"vCont...