作者no1kk (心中在下雨)
看板Ajax
标题Re: [问题] ajax取得资料後填入对应的位置??
时间Fri Oct 15 11:03:50 2010
方法一 (参考mesak的方法)
$.each(url,function(i,n){
$.post(n,function(a){
var re = new RegExp(/<title>(.*)<\/title>/i);
var c = re.exec(a)[1];
$("body").append('<a href="'+n+'" title="'+n+'">'+c+'</a><br /><br />');
});
});
方法二 (参考grence的方法)
var n=url.length;
for(var i=0;i<n;i++){
var u=url[i], $a = $('<a href="'+u+'" title="'+u+'"></a><br /><br />');
$a.appendTo("body");
(function($closure_a){
$.post(u,function(a){
var re = new RegExp(/<title>(.*)<\/title>/i);
var c = re.exec(a)[1];
$closure_a.html(c);
});
})($a);
}
这两个方式都可以正确的执行
方法一我的疑惑是:
ajax是不同步的,所以post回来的时候n应该已经是不同的值了?
但结果却不是这样
是因为每个post都被一个fn包住,所以每个fn都有自己的n吗?
方法二我的不明白是:
(function($closure_a){.....})($a);
这个是什麽意思?
要怎麽用?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.75.166.220
1F:→ TonyQ:其实方法一跟方法二在解决这件事情上的角色是一样的, 10/15 11:15
2F:→ TonyQ:方法一只是被包装过,本质上还是一个方法二。 10/15 11:15
3F:→ TonyQ:这就是我说的 closure 10/15 11:16
5F:→ no1kk:感谢!!那篇文章说的很清楚...我明白了 10/15 11:55
6F:→ no1kk:顺便问一下,所以後面()里面的$a就是把值传给$closure_a罗?! 10/15 12:00
7F:→ no1kk:意思跟在里面的第一行宣告var $closure_a = $a 是一样的? 10/15 12:01
8F:→ TonyQ:没啊 $closure_a 是 function parameter , $a 是传入的值 10/15 12:43
9F:→ grence:宣告一个匿名函数,然後立刻执行 10/16 00:30
10F:→ grence:& 你的想法是对的,每个 function会有独立的变数作用域(?) 10/16 00:37
11F:→ grence:用词我不太确定怎麽翻…有兴趣可自行google scope chain 10/16 00:38
12F:→ TonyQ:我的认知中这算是 variable scope . XD 10/16 16:13