<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Horn Network &#187; AJAX</title>
	<atom:link href="http://klcin.tw/net/tag/ajax/feed" rel="self" type="application/rss+xml" />
	<link>http://klcin.tw/net</link>
	<description>Horn Network (.NET, ASP.NET, C#, VB.NET, JavaScript, Ubuntu, Android ...)</description>
	<lastBuildDate>Fri, 04 Mar 2011 07:25:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>用__doPostBack在client端更新UpdatePanel</title>
		<link>http://klcin.tw/net/__dopostback-updatepanel</link>
		<comments>http://klcin.tw/net/__dopostback-updatepanel#comments</comments>
		<pubDate>Sun, 29 Mar 2009 13:56:20 +0000</pubDate>
		<dc:creator>klcintw</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[檔案下載]]></category>
		<category><![CDATA[UpdatePanel]]></category>
		<category><![CDATA[__doPostBack]]></category>

		<guid isPermaLink="false">http://klcin.tw/net/?p=119</guid>
		<description><![CDATA[本文介紹：用 __doPostBack 在 client 端更新 UpdatePanel，並用 Web Development Helper 觀察。 分析： 前 4 次連線是第一次載入時的頁面（default.aspx）本身及 3 個 AJAX 相關的 script 檔。Response：9,097。 第 5 次是按「選項1」。Response：1,042。 第 6 次是按「__doPostBack.1」。Response：1,042。 第 7 次是按「__doPostBack.2」。Response：1,042。 但 Request 的長度則略有不同。 用 UpdatePanel 的方式確實比原本整頁 postback 好。 但要注意：Page_Load 在普通的 postback&#160; 和 partial postback 都會執行（圖）。可以藉由 IsPostBack 和 IsInAsyncPostBack 來判斷兩者的差異。 可用 __doPostBack 第二個參數傳遞參數。 Server Side 流程 //========================== [...]]]></description>
			<content:encoded><![CDATA[<p><strong>本文介紹</strong>：用 __doPostBack 在 client 端更新 UpdatePanel，並用 <a href="http://projects.nikhilk.net/WebDevHelper" target="_blank">Web Development Helper</a> 觀察。</p>
<p><a href="http://klcin.tw/net/wp-content/uploads/2009/03/snap023.png"><img title="screen" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="402" alt="screen" src="http://klcin.tw/net/wp-content/uploads/2009/03/snap023-thumb.png" width="538" border="0" /></a> </p>
<p>分析：</p>
<ul>
<li>前 4 次連線是第一次載入時的頁面（default.aspx）本身及 3 個 AJAX 相關的 script 檔。Response：9,097。     <br />第 5 次是按「選項1」。Response：1,042。      <br />第 6 次是按「__doPostBack.1」。Response：1,042。      <br />第 7 次是按「__doPostBack.2」。Response：1,042。</li>
<li>但 Request 的長度則略有不同。</li>
</ul>
<p>用 UpdatePanel 的方式確實比原本整頁 postback 好。</p>
<p>但要注意：Page_Load 在普通的 postback&#160; 和 partial postback 都會執行（<a href="http://encosia.com/blog/media/images/updatepanel-life-cycle.png" target="_blank">圖</a>）。可以藉由 IsPostBack 和 IsInAsyncPostBack 來判斷兩者的差異。</p>
<p>可用 __doPostBack 第二個參數傳遞參數。</p>
<p> <span id="more-119"></span><br />
<h2>Server Side 流程</h2>
<p><font color="#004000">//==========================     <br />// 第一次載入</font>    <br />Page_Load    <br />&#160;&#160;&#160; IsPostBack=False    <br />&#160;&#160;&#160; IsInAsyncPostBack=False    <br />&#160;&#160;&#160; __EVENTTARGET=, __EVENTARGUMENT=    <br />UpdatePanel1_PreRender    <br /><font color="#004000">//==========================     <br />// 按「選項1」</font>    <br />Page_Load    <br />&#160;&#160;&#160; IsPostBack=<strong>True</strong>    <br />&#160;&#160;&#160; IsInAsyncPostBack=<strong>True</strong>    <br />&#160;&#160;&#160; __EVENTTARGET=, __EVENTARGUMENT=    <br />Button1_Click    <br />UpdatePanel1_PreRender    <br /><font color="#004000">==========================     <br />// 按「__doPostBack.1」</font>    <br />Page_Load    <br />&#160;&#160;&#160; IsPostBack=<strong>True</strong>    <br />&#160;&#160;&#160; IsInAsyncPostBack=<strong>True</strong>    <br />&#160;&#160;&#160; __EVENTTARGET=UpdatePanel1, __EVENTARGUMENT=參數1,參數2    <br />UpdatePanel1_PreRender    <br /><font color="#004000">==========================     <br />// 按「__doPostBack.2」</font>    <br />Page_Load    <br />&#160;&#160;&#160; IsPostBack=<strong>True</strong>    <br />&#160;&#160;&#160; IsInAsyncPostBack=<strong>True</strong>    <br />&#160;&#160;&#160; __EVENTTARGET=UpdatePanel1, __EVENTARGUMENT=    <br />UpdatePanel1_PreRender    <br /><font color="#004000">==========================     <br />// 按「清除」</font>    <br />Page_Load    <br />&#160;&#160;&#160; IsPostBack=<strong>True</strong>    <br />&#160;&#160;&#160; IsInAsyncPostBack=False    <br />&#160;&#160;&#160; __EVENTTARGET=UpdatePanel1, __EVENTARGUMENT=    <br />UpdatePanel1_PreRender</p>
<p>&#160;</p>
<h2>程式碼</h2>
<h3>default.aspx</h3>
<p>
<pre class="brush: html">&lt;%@ Page Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; CodeBehind=&quot;Default.aspx.cs&quot; Inherits=&quot;WebApplication1._Default&quot; %&gt;
&lt;%@ Register assembly=&quot;System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&quot; namespace=&quot;System.Web.UI&quot; tagprefix=&quot;asp&quot; %&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; &gt;
&lt;head runat=&quot;server&quot;&gt;
  &lt;title&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
 &lt;form id=&quot;form1&quot; runat=&quot;server&quot;&gt;&lt;div&gt;
    &lt;asp:ScriptManager ID=&quot;ScriptManager1&quot; runat=&quot;server&quot;&gt;
    &lt;/asp:ScriptManager&gt;

    &lt;asp:UpdatePanel ID=&quot;UpdatePanel1&quot; runat=&quot;server&quot;
    onprerender=&quot;UpdatePanel1_PreRender&quot;&gt;
    &lt;ContentTemplate&gt;

    票數：&lt;asp:Label ID=&quot;Label1&quot; runat=&quot;server&quot; Text=&quot;Label&quot;&gt;&lt;/asp:Label&gt;&lt;br /&gt;
    &lt;asp:Button ID=&quot;Button1&quot; runat=&quot;server&quot; Text=&quot;選項1&quot; onclick=&quot;Button1_Click&quot; /&gt;
    &lt;asp:Button ID=&quot;Button2&quot; runat=&quot;server&quot; Text=&quot;選項2&quot; onclick=&quot;Button2_Click&quot; /&gt;
    &lt;br /&gt;
    &lt;input type=&quot;button&quot; value=&quot;__doPostBack.1&quot; name=&quot;btn1&quot; id=&quot;btn1&quot; onclick=&quot;__doPostBack(&#039;UpdatePanel1&#039;, &#039;參數1,參數2&#039;);&quot; /&gt;
    &lt;input type=&quot;button&quot; value=&quot;__doPostBack.2&quot; name=&quot;btn2&quot; id=&quot;btn2&quot; onclick=&quot;__doPostBack(&#039;UpdatePanel1&#039;, &#039;&#039;);&quot; /&gt;
    &lt;br /&gt;裡面：&lt;%=DateTime.Now.ToString() %&gt;
    &lt;/ContentTemplate&gt;

    &lt;/asp:UpdatePanel&gt;
    &lt;asp:Button ID=&quot;btnReset&quot; runat=&quot;server&quot; Text=&quot;清除&quot; onclick=&quot;btnReset_Click&quot; /&gt;
    &lt;br /&gt;外面：&lt;%=DateTime.Now.ToString() %&gt;
&lt;/div&gt;&lt;/form&gt;&lt;/body&gt;&lt;/html&gt;
</pre>
</p>
<h3>default.aspx.cs</h3>
<p>
<pre class="brush: c#">using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
 public partial class _Default : System.Web.UI.Page
 {
  protected void Page_Load(object sender, EventArgs e)
  {
   Debug.WriteLine(&quot;==========================rnPage_Load&quot;);
   Debug.WriteLine(string.Format(&quot;tIsPostBack={0}&quot;, this.IsPostBack));
   Debug.WriteLine(string.Format(&quot;tIsInAsyncPostBack={0}&quot;, this.ScriptManager1.IsInAsyncPostBack));
   Debug.WriteLine(string.Format(&quot;t__EVENTTARGET={0}, __EVENTARGUMENT={1}&quot;, Request[&quot;__EVENTTARGET&quot;], Request[&quot;__EVENTARGUMENT&quot;]));

   if (Session[&quot;0&quot;] == null)
   {
    Session[&quot;0&quot;] = 0;
    Session[&quot;1&quot;] = 0;
   } // if

   ShowResult();
  }

  protected void Button1_Click(object sender, EventArgs e)
  {
   Debug.WriteLine(&quot;Button1_Click&quot;);
   Session[&quot;0&quot;] = Int32.Parse(Session[&quot;0&quot;].ToString()) + 1;
   ShowResult();
  }

  protected void Button2_Click(object sender, EventArgs e)
  {
   Debug.WriteLine(&quot;Button2_Click&quot;);
   Session[&quot;1&quot;] = Int32.Parse(Session[&quot;1&quot;].ToString()) + 1;
   ShowResult();
  }

  private void ShowResult()
  {
   this.Label1.Text = string.Format(&quot;1:{0}, 2:{1}&quot;, Session[&quot;0&quot;], Session[&quot;1&quot;]);
  }

  protected void btnReset_Click(object sender, EventArgs e)
  {
   Session[&quot;0&quot;] = 0;
   Session[&quot;1&quot;] = 0;
   ShowResult();
  }

  protected void UpdatePanel1_PreRender(object sender, EventArgs e)
  {
   Debug.WriteLine(&quot;UpdatePanel1_PreRender&quot;);
  }
 }
}
</pre>
</p>
<p>&#160;</p>
<h4>檔案下載</h4>
<ul>
<li><a href='http://www.box.net/shared/etucrnuf24' target='_blank'>程式碼（Box.net）</a></li>
</ul>
<h4>參考資料</h4>
<ul>
<li><a href="http://encosia.com/2007/10/24/are-you-making-these-3-common-aspnet-ajax-mistakes/" target="_blank">Are you making these 3 common ASP.NET AJAX mistakes? | Encosia</a></li>
<li><a href="http://encosia.com/2007/07/13/easily-refresh-an-updatepanel-using-javascript/" target="_blank">Easily refresh an UpdatePanel, using JavaScript | Encosia</a></li>
<li><a href="http://forums.asp.net/p/1067215/1550710.aspx" target="_blank">UpdatePanel and __doPostBack &#8211; ASP.NET Forums</a></li>
<li>[MSDN] <a href="http://msdn.microsoft.com/en-us/library/aa720099(vs.71).aspx" target="_blank">Generating Client-Side Script for Postback</a></li>
<li>[MSDN] <a href="http://msdn.microsoft.com/en-us/library/ms178472.aspx" target="_blank">ASP.NET Page Life Cycle Overview</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://klcin.tw/net/__dopostback-updatepanel/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google AJAX Search 簡單範例</title>
		<link>http://klcin.tw/net/google-ajax-search-demo</link>
		<comments>http://klcin.tw/net/google-ajax-search-demo#comments</comments>
		<pubDate>Fri, 12 Sep 2008 10:40:51 +0000</pubDate>
		<dc:creator>klcintw</dc:creator>
				<category><![CDATA[Google Search]]></category>
		<category><![CDATA[AJAX]]></category>

		<guid isPermaLink="false">http://klcin.tw/net/?p=81</guid>
		<description><![CDATA[&#160; 首先要到 http://code.google.com/apis/ajaxsearch/signup.html 申請 AJAX Search API Key ，如果你已經申請過 Google Map API Key 可以直接使用兩者是相同的。 只要一個 DIV 就能有 Google Search 的大部份功能！ Google API GSearchControl GsearcherOptions 預設只顯示第一個結果，加上 GSearchControl.EXPAND_MODE_OPEN 就會自動展開結果。 GwebSearch setUserDefinedClassSuffix 可以附加結果欄中的 css名稱。 若要用程式執行查詢功能可用： searchControl.execute(關鍵字); 程式碼 執行範例 &#60;script src=&#34;http://maps.google.com/jsapi?key=&#34; type=&#34;text/javascript&#34;&#62;&#60;/script&#62; &#60;script type=&#34;text/javascript&#34;&#62; //&#60;![CDATA[ google.load(&#34;search&#34;, &#34;1&#34;); google.setOnLoadCallback(initialize); var map = null; function initialize() { // 建立一個搜尋控制項 var searchControl [...]]]></description>
			<content:encoded><![CDATA[<p align="center">&#160;<img title="gsearch" height="407" alt="gsearch" src="http://klcin.tw/net/wp-content/uploads/2008/09/gsearch.gif" width="330" /> </p>
<p>首先要到 <a title="http://code.google.com/apis/ajaxsearch/signup.html" href="http://code.google.com/apis/ajaxsearch/signup.html">http://code.google.com/apis/ajaxsearch/signup.html</a> 申請 AJAX Search API Key ，如果你已經申請過 <a href="http://code.google.com/apis/maps/signup.html" target="_blank">Google Map API Key</a> 可以直接使用兩者是相同的。</p>
<p>只要一個 DIV 就能有 Google Search 的大部份功能！</p>
<p> <span id="more-81"></span><br />
<h2>Google API</h2>
<ul>
<li><a href="http://code.google.com/apis/ajaxsearch/documentation/reference.html#_class_GSearchControl" target="_blank">GSearchControl</a></li>
<li><a href="http://code.google.com/apis/ajaxsearch/documentation/reference.html#_class_GsearcherOptions" target="_blank">GsearcherOptions</a>      <br />預設只顯示第一個結果，加上 GSearchControl.EXPAND_MODE_OPEN 就會自動展開結果。</li>
<li><a href="http://code.google.com/apis/ajaxsearch/documentation/reference.html#_class_GwebSearch" target="_blank">GwebSearch</a>      <br />setUserDefinedClassSuffix 可以附加結果欄中的 css名稱。</li>
<li>若要用程式執行查詢功能可用：     <br />searchControl.execute(關鍵字);</li>
</ul>
<h2>程式碼</h2>
<p><a href="http://klcin.tw/ap/gmap/gsearch.htm" target="_blank" rel="gb_page_fs[]">執行範例</a></p>
<pre class="brush: javascript">&lt;script src=&quot;http://maps.google.com/jsapi?key=&quot;
      type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
    //&lt;![CDATA[
google.load(&quot;search&quot;, &quot;1&quot;);
google.setOnLoadCallback(initialize);

var map = null;
function initialize() {
    //  建立一個搜尋控制項
    var searchControl = new google.search.SearchControl();
	// 指定展開搜尋結果
    var options = new GsearcherOptions();
    //options.setExpandMode(GSearchControl.EXPAND_MODE_OPEN);

	// 建立一個網站搜尋
    var siteSearch = new GwebSearch();
    siteSearch.setUserDefinedLabel(&quot;Horn Network&quot;);
    siteSearch.setUserDefinedClassSuffix(&quot;hn&quot;);
    siteSearch.setSiteRestriction(&quot;http://klcin.tw/net&quot;);
    searchControl.addSearcher(siteSearch, options); 

	// 建立一個網站搜尋
	siteSearch = new GwebSearch();
    siteSearch.setUserDefinedLabel(&quot;Horn Library&quot;);
    siteSearch.setUserDefinedClassSuffix(&quot;hl&quot;);
    siteSearch.setSiteRestriction(&quot;http://klcin.tw/book&quot;);
    searchControl.addSearcher(siteSearch, options); 

	// Tell the searcher to draw itself and tell it where to attach
	searchControl.draw(document.getElementById(&quot;searchcontrol&quot;));
}
&lt;/script&gt;

[body]
&lt;div id=&quot;searchcontrol&quot; style=&quot;width:100%;&quot;&gt;&lt;/div&gt;
[/body]</pre>
<h4>參考資料：</h4>
<ul>
<li><a href="http://code.google.com/apis/ajaxsearch/documentation/" target="_blank">Developer&#8217;s Guide &#8211; Google AJAX Search API &#8211; Google Code</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://klcin.tw/net/google-ajax-search-demo/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[PHP]PO3 一次幫你從3個地方（Buboo,Plurk,Twitter）讀取訊息！</title>
		<link>http://klcin.tw/net/pop3-read</link>
		<comments>http://klcin.tw/net/pop3-read#comments</comments>
		<pubDate>Wed, 09 Jul 2008 15:41:05 +0000</pubDate>
		<dc:creator>klcintw</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PO3]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[Buboo]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[Plurk]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://klcin.tw/net/?p=8</guid>
		<description><![CDATA[為了統一來源及安全限制，我在server端放一個ajax.php用來取得Buboo,Plurk,Twitter的json資料，在client使用javascript處理資料呈現。 資料來源及內容： Buboo [資料來源] : http://api.buboo.tw/user_timeline/{使用者帳號}.rss?count={訊息數量}created_at : 日期（2008-07-07 23:15）text : 訊息內容id : 訊息代號（8f8170289cba351） 原文網址：http://buboo.tw/msg/{id}.html Plurk [資料來源] : 無直接網址。需先取的userid(數字)，再POST到 http://www.plurk.com/TimeLine/getPlurks ，其中欄位 user_id=$useridqualifier : 動作（”:”表示未指定）content_raw : 訊息內容content : 訊息內容（已格式成HTML）posted : 日期（new Date(&#34;Mon, 07 Jul 2008 04:08:40 GMT&#34;)） 原文網址：無 Twitter [資料來源] : http://twitter.com/statuses/user_timeline/{使用者帳號}.json&#38;count={訊息數量}text : 訊息內容Source : 發訊來源id : 訊息代號（851703528）created_at : 日期（Mon Jul 07 04:08:41 +0000 2008） 原文網址：http://twitter.com/{user.screen_name}/statuses/{id} &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>為了統一來源及安全限制，我在server端放一個ajax.php用來取得Buboo,Plurk,Twitter的json資料，在client使用javascript處理資料呈現。</p>
<p><span id="more-8"></span>
<p><strong>資料來源及內容：</strong></p>
<hr size="1" />
<a href="http://klcin.tw/net/images/PHPPO33BubooPlurkTwitter_13E10/jsonbuboo.gif"><img title="json-buboo" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 5px 0px 0px; border-right-width: 0px" height="218" alt="json-buboo" src="http://klcin.tw/net/images/PHPPO33BubooPlurkTwitter_13E10/jsonbuboo_thumb.gif" width="167" align="left" border="0" /></a>
<p><strong>Buboo</strong> <sup>[<a href="http://buboo.tw/apidoc" target="_blank">資料來源</a>]</sup> : <font color="#ff0000">http://api.buboo.tw/user_timeline/{使用者帳號}.rss?count={訊息數量}</font><br />created_at : 日期（2008-07-07 23:15）<br />text : 訊息內容<br />id : 訊息代號（8f8170289cba351）</p>
<p>原文網址：<font color="#ff0000">http://buboo.tw/msg/{id}.html</font><br clear="all" /></p>
<hr size="1" />
<a href="http://klcin.tw/net/images/PHPPO33BubooPlurkTwitter_13E10/jsonplurk.gif"><img title="json-plurk" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 5px 0px 0px; border-right-width: 0px" height="278" alt="json-plurk" src="http://klcin.tw/net/images/PHPPO33BubooPlurkTwitter_13E10/jsonplurk_thumb.gif" width="144" align="left" border="0" /></a>
<p><strong>Plurk</strong> <sup>[<a href="http://plurkwiki.badchemicals.net/index.php?title=TimeLine/getPlurks" target="_blank">資料來源</a>]</sup> : 無直接網址。<br />需先取的userid(數字)，再POST到 <font color="#ff0000">http://www.plurk.com/TimeLine/getPlurks</font> ，其中欄位 user_id=$userid<br />qualifier : 動作（”:”表示未指定）<br />content_raw : 訊息內容<br />content : 訊息內容（已格式成HTML）<br />posted : 日期（new Date(&quot;Mon, 07 Jul 2008 04:08:40 GMT&quot;)）</p>
<p>原文網址：無<br clear="all" /></p>
<hr size="1" />
<a href="http://klcin.tw/net/images/PHPPO33BubooPlurkTwitter_13E10/jsontwitter.gif"><img title="json-twitter" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 5px 0px 0px; border-right-width: 0px" height="313" alt="json-twitter" src="http://klcin.tw/net/images/PHPPO33BubooPlurkTwitter_13E10/jsontwitter_thumb.gif" width="185" align="left" border="0" /></a>
<p><strong>Twitter</strong> <sup>[<a href="http://groups.google.com/group/twitter-development-talk/web/api-documentation#StatusMethods" target="_blank">資料來源</a>]</sup> : <font color="#ff0000">http://twitter.com/statuses/user_timeline/{使用者帳號}.json&amp;count={訊息數量}</font><br />text : 訊息內容<br />Source : 發訊來源<br />id : 訊息代號（851703528）<br />created_at : 日期（Mon Jul 07 04:08:41 +0000 2008）</p>
<p>原文網址：<font color="#ff0000">http://twitter.com/{user.screen_name}/statuses/{id}</font><br clear="all" /></p>
<p>&nbsp;</p>
<p><strong>Server端 ajax.php：</strong></p>
<pre class="brush: php">&lt;?php
# 設定傳入參數改以 p_ 開頭變數表示
import_request_variables(&#039;gp&#039;, &#039;p_&#039;);

if ( $p_type==&quot;plurk&quot; ) {
	// plurk 特別處理
	echo get_plurk($p_username);
} // if
else {
	// 一般指定url
	echo file_get_contents($p_url, 1000000);
} // else

// 取得plurk資料
function get_plurk($uid) {
	if ( $uid==&quot;&quot; ) return &quot;&quot;;

	$curl_handle = curl_init();
	curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);

	// 先從網頁解析出user_id
	curl_setopt($curl_handle, CURLOPT_URL, &quot;http://www.plurk.com/user/$uid&quot;);
	$html = curl_exec($curl_handle);
	preg_match(&#039;/var GLOBAL = \{.*&quot;uid&quot;: ([\d]+),.*\}/imU&#039;, $html, $matches);
	$uid = $matches[1];

	if ( $uid == &#039;&#039; )
		$json = &quot;No User&quot;;
	else {
		// 用POST送出請求
		curl_setopt($curl_handle, CURLOPT_URL, &#039;http://www.plurk.com/TimeLine/getPlurks&#039;);
		curl_setopt($curl_handle, CURLOPT_POSTFIELDS, &quot;user_id=$uid&quot;);
		$json = curl_exec($curl_handle);
	} // else

	curl_close($curl_handle);

	return $json;
}

?&gt;</pre>
<p>&nbsp;</p>
<p><strong>Client端 javascript：</strong></p>
<p>AJAX (prototype)</p>
<pre class="brush: javascript">function ajaxBuboo() {
	var uid = $(&#039;userid&#039;).value;
	$(&#039;divBuboo&#039;).innerHTML = &quot;loading (&quot;+uid +&quot;)...&quot;;
	var url = &#039;ajax.php?url=http://api.buboo.tw/user_timeline.json?uid=&#039;+uid +&#039;&amp;amp;count=5&#039;;
	new Ajax.Request(url,
　		{
　　	method: &#039;get&#039;,
	　　asynchronous: true,
　　	onSuccess:showResultBuboo,
	　　onFailure:ShowFailure
　		}
	);
}
function showResultBuboo(httpObj) {
	$(&#039;divBuboo&#039;).innerHTML = buboo(httpObj.responseText.evalJSON(false));
}</pre>
<p>Buboo</p>
<pre class="brush: javascript">function buboo(json) {
	var retHtml = &quot;&quot;;
	for (var i=0; i&lt;json.length &amp;&amp; i&lt;&lt;?=$count?&gt;; i++){
		retHtml += (&#039;&lt;li&gt;&#039;+json[i].text+&#039; &lt;a href=&quot;http://buboo.tw/msg/&#039;+
			json[i].id+&#039;.html&quot; target=&quot;_blank&quot;&gt;url&lt;/a&gt;&lt;/li&gt;&#039;
		);
	} // for
	return retHtml;
}</pre>
<p>Plurk</p>
<pre class="brush: javascript">function plurk(json) {
	var retHtml = &quot;&quot;;
	for (var i=0; i&lt;json.length ; i++){
		retHtml += (&#039;&lt;li&gt;&#039;+
			(json[i].qualifier==&quot;:&quot;?&quot;&quot;:json[i].qualifier+&quot;:&quot; )+&#039; &#039;+
			json[i].content+&#039; [&#039;+json[i].response_count+&#039;]&lt;/li&gt;&#039;
		);
	} // for
	return retHtml;
}</pre>
<p>Twitter</p>
<pre class="brush: javascript">function twitter(json) {
	var retHtml = &quot;&quot;;
	var username = &quot;&quot;;
	for (var i=0; i&lt;json.length; i++){
		retHtml += (&#039;&lt;li&gt;&#039;+json[i].text+&#039; &lt;a href=&quot;http://twitter.com/&#039;+
			json[i].user.screen_name+&#039;/statuses/&#039;+json[i].id+&#039;&quot; target=&quot;_blank&quot;&gt;url&lt;/a&gt;&lt;/li&gt;&#039;
		);
	} // for
	return retHtml;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://klcin.tw/net/pop3-read/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

