Re: [問題] ajax取得資料後填入對應的位置??

看板Ajax作者 (心中在下雨)時間15年前 (2010/10/15 11:03), 編輯推噓0(0012)
留言12則, 3人參與, 最新討論串4/5 (看更多)
方法一 (參考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

10/15 11:15, , 1F
其實方法一跟方法二在解決這件事情上的角色是一樣的,
10/15 11:15, 1F

10/15 11:15, , 2F
方法一只是被包裝過,本質上還是一個方法二。
10/15 11:15, 2F

10/15 11:16, , 3F
這就是我說的 closure
10/15 11:16, 3F

10/15 11:16, , 4F
#1Cb4fOad (Ajax) 這篇問題跟你的問題是很像的 可以看看
10/15 11:16, 4F

10/15 11:55, , 5F
感謝!!那篇文章說的很清楚...我明白了
10/15 11:55, 5F

10/15 12:00, , 6F
順便問一下,所以後面()裡面的$a就是把值傳給$closure_a囉?!
10/15 12:00, 6F

10/15 12:01, , 7F
意思跟在裡面的第一行宣告var $closure_a = $a 是一樣的?
10/15 12:01, 7F

10/15 12:43, , 8F
沒啊 $closure_a 是 function parameter , $a 是傳入的值
10/15 12:43, 8F

10/16 00:30, , 9F
宣告一個匿名函數,然後立刻執行
10/16 00:30, 9F

10/16 00:37, , 10F
& 你的想法是對的,每個 function會有獨立的變數作用域(?)
10/16 00:37, 10F

10/16 00:38, , 11F
用詞我不太確定怎麼翻…有興趣可自行google scope chain
10/16 00:38, 11F

10/16 16:13, , 12F
我的認知中這算是 variable scope . XD
10/16 16:13, 12F
文章代碼(AID): #1CjyIPis (Ajax)
文章代碼(AID): #1CjyIPis (Ajax)