作者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