asfman
android developer
IT博客
首页
新文章
新随笔
聚合
管理
posts - 90, comments - 213, trackbacks - 0
Ajax基石脚本异步并发调用参数传递
在Ajax开发框架中,最基本的划分是服务器端和客户端。服务器端相对来说比较简单,只要是可以开发动态网页的语言都可以胜任;客户端浏览器就是JScript/JavaScript的天下了,好像没有看到有VBScript做的Ajax客户端库,就算它只支持IE。由于客户端依赖于脚本并运行在浏览器中,似乎比服务器端的可实现和可管理性还要差些。
这里我说一下Ajax中的A, Asynchronous调用的一些问题。如果我们在异步调用时不为方法传递任何的参数,那么这个问题也就简单甚至不存在了。但是事实上,我们开发一些稍微复杂些的功能时,对于"脚本异步并发调用参数传递"这个功能是很需要的。说的严重些,可以把这个功能看成Ajax客户端框架能否真正Asynchronous的基石。对于异步调用参数传递的问题,可以看我以前的一篇文章"
使用匿名函数为setInterval传递参数
"。虽然文中的示例很好地解决了参数传递问题,但是我们看看下面的示例,看会发现什么呢?
function
foo()
{
var
param
=
100
;
window.setTimeout(
function
()
{
intervalRun(param);
}
,
0
);
param
=
0
;
}
function
intervalRun(times)
{
alert(times);
}
我们执行foo,会得到什么样的alert结果呢?100? or 0?,答案是:0。其实写过内嵌函数就知道,这里要真确的传入100,需要这样改写foo方法:
function
foo()
{
var
param
=
100
;
var
__param
=
param;
window.setTimeout(
function
()
{
intervalRun(__param);
}
,
0
);
param
=
0
;
}
// 这样添加一个变量来存储param就可以了,这下执行foo得到的alert结果就是:100。
上面这个修正本身没有问题,可是如果我在并发执行的情况下,就可能又有新的问题。示例代码:
function
doTick()
{
var
tick
=
new
Date().getTime();
var
__tick = tick;
var
foo
=
function
()
{
GetTick(__tick);
}
;
window.setTimeout(foo,
3000
);
}
function
GetTick(tick)
{
//
to do something depend on tick parameter
}
当我们在调用doTick方法时,如果以小于3000ms的频率并发,将会导致前一次的tick变量被后面执行的执行过程修改的问题,从而导致GetTick方法取到错误的tick参数。也就是说必须把doTick方法看成一个,需要"本身执行时间+3000ms"才能运行完的方法,然后再保证
并行
的执行doTick方法才不会出错。这样的限制条件显然是不可接受的,那么我们该怎么办呢?
其实我们只需要使用内嵌函数自身帮助我们传递参数就行了,修改后的示例如下:
function
doTick()
{
var
tick
=
new
Date().getTime();
var
foo
=
function
()
{
var
__tick
=
foo.params[
0
];
GetTick(__tick);
}
;
foo.params
=
[tick];
window.setTimeout(foo,
0
);
}
由于内嵌函数构造出一个Closure Scope,它将帮组我们保存参数的Context,使我们获得真正的"异步并发调用参数传递"效果。
posted on 2006-03-21 14:04
汪杰
阅读(204)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
<
2006年10月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(15)
给我留言
查看公开留言
查看私人留言
随笔分类
(1)
divandcss(1)
随笔档案
(90)
2016年10月 (1)
2010年5月 (1)
2009年12月 (2)
2009年7月 (1)
2009年5月 (1)
2009年3月 (1)
2008年10月 (2)
2008年9月 (1)
2008年2月 (1)
2007年11月 (1)
2007年10月 (1)
2007年4月 (3)
2007年1月 (1)
2006年12月 (1)
2006年10月 (5)
2006年9月 (5)
2006年8月 (6)
2006年7月 (19)
2006年6月 (3)
2006年5月 (1)
2006年4月 (18)
2006年3月 (15)
文章分类
(727)
ad code(2)
ajax(20)
as3(3)
asp(javascrpt)(57)
database
Dhtml DOm(15)
div css dhtml(32)
divandcss(31)
Ext(3)
flash(6)
freemarker(1)
hengxing网站js(186)
Java(64)
javascript(228)
jquery(8)
js game(4)
js+dhtml(7)
net(4)
others(24)
sql access(17)
vml(2)
xml(9)
类(4)
文章档案
(712)
2013年6月 (1)
2013年1月 (1)
2012年12月 (1)
2012年11月 (1)
2012年9月 (2)
2012年7月 (2)
2012年6月 (6)
2012年5月 (8)
2012年4月 (1)
2012年3月 (1)
2012年2月 (2)
2011年12月 (1)
2011年11月 (2)
2011年10月 (5)
2011年9月 (3)
2011年8月 (4)
2011年7月 (2)
2011年6月 (7)
2011年5月 (1)
2011年4月 (11)
2011年3月 (4)
2010年8月 (1)
2010年5月 (5)
2010年4月 (3)
2010年3月 (1)
2010年1月 (2)
2009年12月 (1)
2009年11月 (2)
2009年9月 (5)
2009年8月 (1)
2009年7月 (3)
2009年6月 (4)
2009年5月 (6)
2009年4月 (4)
2009年3月 (8)
2009年2月 (3)
2009年1月 (2)
2008年12月 (6)
2008年11月 (5)
2008年10月 (12)
2008年9月 (6)
2008年8月 (7)
2008年7月 (2)
2008年6月 (5)
2008年5月 (3)
2008年4月 (2)
2008年3月 (12)
2008年2月 (1)
2008年1月 (3)
2007年12月 (11)
2007年11月 (18)
2007年10月 (6)
2007年9月 (3)
2007年8月 (10)
2007年7月 (5)
2007年6月 (16)
2007年5月 (8)
2007年4月 (16)
2007年2月 (3)
2007年1月 (9)
2006年12月 (11)
2006年11月 (20)
2006年10月 (29)
2006年9月 (9)
2006年8月 (17)
2006年7月 (28)
2006年6月 (19)
2006年4月 (234)
2006年3月 (59)
相册
effect
收藏夹
javascript
http://blog.csdn.net/prodigynonsense
25175asp
8da blog
8da域名转向
aimingoo
ajax60
http://www.maxkiesler.com/index.php/weblog/comments/60_more_helpful_ajax_tutorials/
ajax论坛(推荐)
ASP.NET 快速入门
aspdotnet(c#)
birdsome
birdsome
c#
china-pub
chinese-using-layouts-ext-part-1
chsmsdn
communitycsdn
csdn社区
css+xhtml
csscontent bucuo
csser
http://www.csser.org/
div css 论坛
div css 论坛
Eric Liu(For the past time)
EXT UI FORUM
EXT UI
Ext天晓得
http://blog.csdn.net/tianxiaode/
Ext教程
Ext教程
faq(javascript)
hbjswj
hbjswj
hengxing不错的js网站
http://blog.csdn.net/prodigynonsense
javascript
http://webfx.eae.net/dhtml/
http://webfx.eae.net/dhtml/
http://www.elook.net.cn/handbook/php/index.html
http://www.elook.net.cn/handbook/php/index.html
http://www.shu3.net/blog/default.asp?cateID=14
http://www.shu3.net/blog/default.asp?cateID=14
http://www.suhai.com.cn/control/
http://www.suhai.com.cn/control/
http://www.xmlhttp.cn/
http://www.xmlhttp.cn/
http://www.xmlhttp.cn/manual/xmlhttprequest.html
http://www.xmlhttp.cn/manual/xmlhttprequest.html
hutia's friend
ivvn
J2EE BBS
JAVASCRIPT(NEW)
javascript-english
JAVA菜鸟
jser's blog 1111
JS语法参考含实例
http://javascript-reference.info/#object
meizz
meizz的专栏
music
mysql手册
photoshop
php
php手册
relax life(MANY CODES)
relaxlife
Thinking in Java 3rd Edition,中文版
ttyp
javascript
validate xml
vml学习
cccccc
w3schoolsphp
http://www.w3schools.com/php/php_intro.asp
where there is a will ,there is a way
xml
xml学习 某人的blog
xml学习教程
xml论坛
一夜千鸟
一夜千鸟
与51js同步的好网站哦
两万原代码疯狂下载
人大英语角BBS
http://www.csser.org/
向他学习
国内ajax站点
http://www.jrj.com/
天气预报
script srchttp://dw8.cn/2006/tq script
好的js个人网站
布鲁狼
很多chm
W3CHINA.ORG讨论区
有一些js
风云给
沙子的Blog
沪江论坛
http://www.csser.org/
泣红亭
游戏人blog
苹果生活ajax
讨债公司
韩国网址
友情链接
搬家公司
最新随笔
1. 使用 Vue.js 创建的 Calendar
2. [转]培养自己的气质
3. 睡觉时间
4. chrome快捷键
5. 知者弗言 言者弗知
6. __proto__
7. 人法地,地法天,天法道,道法自然
8. jq之filter
9. Javascript的调试利器:Firebug使用详解(转)
10. 天道台词
搜索
积分与排名
积分 - 466814
排名 - 6
最新随笔
1. 使用 Vue.js 创建的 Calendar
2. [转]培养自己的气质
3. 睡觉时间
4. chrome快捷键
5. 知者弗言 言者弗知
6. __proto__
7. 人法地,地法天,天法道,道法自然
8. jq之filter
9. Javascript的调试利器:Firebug使用详解(转)
10. 天道台词
最新评论
1. re: 关于编码、unicode、utf-8的讨论
:cache-control,Expires。
--张丹宁
2. re: Android NFC相关资料之MifareClassic卡(读写)
我目前需要读写MifareClassic卡,目前还是小白,希望大神指教!
--彭林
3. re: JS获取输入框当前光标左右文本(zt)
温热we
--二万人
4. re: Android NFC相关资料之MifareClassic卡(读写)
514701946@qq.com @ff
--ff
5. re: Android NFC相关资料之MifareClassic卡(读写)
最近在研究这个,请问有没有源码,谢谢你
--ff
阅读排行榜
1. Javascript的调试利器:Firebug使用详解(转) (5534)
2. Codepage的定义和历史(3860)
3. 关于编码、unicode、utf-8的讨论(3525)
4. Eclipse实用教程 (2544)
5. 如何学JAVA(2515)
评论排行榜
1. program which duplicates itself(6)
2. 关于编码、unicode、utf-8的讨论(4)
3. think about push and pop (3)
4. chrome快捷键(3)
5. prototype重新记忆(2)