| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    学好外语能够获得更多的国外先进编程技术  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> Web开发 >> 网络编程 >> AJAX >> 文章正文

Ajax基石脚本异步并发调用参数传递        【字体:
Ajax基石脚本异步并发调用参数传递
作者:-    文章来源:-    点击数:    更新时间:2006-7-18

                                                                                                                  

       在Ajax开发框架中,最基本的划分是服务器端和客户端。服务器端相对来说比较简单,只要是可以开发动态网页的语言都可以胜任;客户端浏览器就是JScript/JavaScript的天下了,好像没有看到有VBScript做的Ajax客户端库。由于客户端依赖于脚本并运行在浏览器中,似乎比服务器端的可实现和可管理性还要差些。

   这里我说一下Ajax中的A, Asynchronous调用的一些问题。如果我们在异步调用时不为方法传递任何的参数,那么这个问题也就简单甚至不存在了。但是事实上,我们开发一些稍微复杂些的功能时,对于"脚本异步并发调用参数传递"这个功能是很需要的。说的严重些,可以把这个功能看成Ajax客户端框架能否真正Asynchronous的基石。我们看看下面的示例,会发现什么呢?

 
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,使我们获得真正的"异步并发调用参数传递"效果。

 

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 一个最简单的AJAX实例及解析

  • 利用AJAX与数据岛实现无刷新…

  • AJAX指南--- 操作XML入门

  • AJAX在Post中文的时候解决乱…

  • 使用Ajax的挑战

  • 二级联动下拉框

  • 了解Ajax框架

  • XMLHttpRequest和Ajax入主We…

  • 关于ajax的一些随笔

  • 褪色一例

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |