ﻳﺎﻫﻮ
JSONﭼﻴﺴﺖ؟ اﻳﻦ ﺗﻌﺮﻳﻒ ﻣﺴﺘﻘﻴﻤﺎ از json.orgو ﺑﺨﺶ ﻓﺎرﺳﻲ آن ﮔﺮﻓﺘﻪ ﺷﺪه اﺳﺖ: »ﺟﻲﺳﺎن ﻳﺎ JSON (JavaScript Object Notation) ﻳﻚ ﻓﺮﻣﺖ ﺗﺒﺎدل داده ﺳﺒﻚ (lightweight) ﻣﻲﺑﺎﺷﺪ ﻛﻪ ﺧﻮاﻧﺪن و ﻧﻮﺷﺘﻦ آن ﺑﺮاي اﻧﺴﺎن و ﺗﻮﻟﻴﺪ و ﭘﺎرس ﻛﺮدن آن ﺑﺮاي ﻣﺎﺷﻴﻦﻫﺎ آﺳﺎن اﺳﺖ .اﻳﻦ زﺑﺎن ﺑﺮ ﻣﺒﻨﺎي ﻳﻚ زﻳﺮ ﻣﺠﻤﻮﻋﻪ از زﺑﺎن ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ،JavaScript اﺳﺘﺎﻧﺪارد ECMA‐262 وﻳﺮاﻳﺶ ﺳﻮم -دﺳﺎﻣﺒﺮ ،1999اﺳﺖ. JSON ﺑﺼﻮرت ﻣﺘﻨﻲ (text) ﺑﻮده و ﻛﺎﻣﻼً ﻣﺴﺘﻘﻞ از زﺑﺎن ﺑﻜﺎر رﻓﺘﻪ اﺳﺖ ،اﻣﺎ از ﻗﻮاﻧﻴﻨﻲ اﺳﺘﻔﺎده ﻣﻲﻛﻨﺪ ﻛﻪ ﺑﺮاي ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﺎن زﺑﺎنﻫﺎي ﺧﺎﻧﻮاده Cﺷﺎﻣﻞ،Perl ،JavaScript ،Java ،C++ ، C ،Python و ﺑﺴﻴﺎري زﺑﺎنﻫﺎي دﻳﮕﺮ آﺷﻨﺎ ﻣﻲﺑﺎﺷﺪ .اﻳﻦ ﺧﺼﻮﺻﻴﺎت JSON را ﻳﻚ زﺑﺎن ﺗﺒﺎدلدادهاي اﻳﺪهآل ﻛﺮده اﺳﺖ«. ﻳﻌﻨﻲ ﭼﻲ؟ ﻳﻌﻨﻲ ﺷﻤﺎ ﺑﺎ اﺳﺘﻔﺎده از اﻳﻦ ﻗﺎﻟﺐ ،اﻃﻼﻋﺎﺗﺖ رو راﺣﺖ ﺟﺎﺑﻪﺟﺎ ﻛﻨﻲ .اﺑﺰاري ﻣﺜﻞ ) .XMLﻛﻪ اﻟﺒﺘﻪ ﻣﺴﻠﻤﻪ ﻛﻪ xmlاﻳﻦ ﺟﻨﮓ رو ﺑﺮد (.اﻣﺎ اﮔﻪ اﻳﻦ دوﺳﺘﻤﻮن ﺑﺎزﻧﺪه اﻳﻦ ﺟﻨﮓ اﺳﺖ ﭘﺲ ﺑﺮاي ﭼﻲ ﻣﺎ دارﻳﻢ درﻣﻮردش ﺻﺤﺒﺖ ﻣﻴﻜﻨﻴﻢ؟ ﻋﻠﺖ اﻳﻦ اﺳﺖ ﻛﻪ ﻫﻨﻮز در ﻓﻨﺎوري ، AJAXاﻳﻦ ﻓﺮﻣﺖ اﻧﺘﻘﺎل داده ﻛﺎرﺑﺮد ﺑﺴﻴﺎر ﻓﺮاواﻧﻲ دارد. ﺑﺎ ﻳﻚ ﻣﺜﺎل ﺟﻠﻮ ﻣﻴﺮوﻳﻢ: 1 ﺷﻤﺎ ﻓﺮض ﻛﻨﻴﺪ ﻛﻪ ﻗﺮار اﺳﺖ ﻣﺤﺘﻮﻳﺎت ﻳﻚ RSSﻫﺮ دو ﺛﺎﻧﻴﻪ ﻳﻜﺒﺎر در ﺻﻔﺤﻪ view.phtmlﻓﺮاﺧﻮاﻧﻲ ﺷﻮد .ﻟﺰوﻣﺎ JSﺑﺎﻳﺪ ﻫﺮ 2ﺛﺎﻧﻴﻪ ﻳﻜﺒﺎر ﺗﻮﺳﻂ AJAXاز ﺻﻔﺤﻪ rss.phpmﻣﺤﺘﻮﻳﺎت ﻓﺎﻳﻞ rssرا ﺑﺨﻮاﻫﺪ. rss.phpm (.*?)#s", $data, $titles ;)($links = array ;)preg_match_all("#
(.*?)#s", $data, $links ;)"ob_start("ob_gzhandler ;)]$cnt = count($links[0 { )for ($i = 0; $i < $cnt; $i++ ;">echo $titles[1][$i] . "
" . $links[1][$i] . "?
ﭼﻨﺪ ﻧﻜﺘﻪ ﭘﻴﺮاﻣﻮن ﻛﺪ ﺣﺎﺿﺮ: اﺳﺘﻔﺎده از file_get_contentsدر ﭼﻨﻴﻦ ﻣﻮاردي ﺑﺴﻴﺎر ﻣﻔﻴﺪﺗﺮ از اﺳﺘﻔﺎده از fopen ﻳﺎ ...ﻣﻴﺒﺎﺷﺪ. اﺳﺘﻔﺎده از regexﺑﺴﻴﺎر ﺳﺮﻳﻌﺘﺮ ﺗﻮاﺑﻊ xmlﻣﻮﺟﻮد در php اﺳﺖ. اﺳﺘﻔﺎده از output bufferingﺑﺴﻴﺎر ﺳﺮﻳﻊ اﺳﺖ و ﻫﻤﭽﻨﻴﻦ اﻳﻦ ﻧﻮع اﺳﺘﻔﺎده ﺑﺎﻋﺚ ﻛﻢ ﺣﺠﻢ ﺷﺪن ﻓﺎﻳﻞ ﺷﻤﺎ ﺧﻮاﻫﺪ ﺷﺪ. ﺣﺘﻤﺎ ﻓﻀﺎﻫﺎي اﺷﻐﺎل ﺷﺪه را ﺗﻮﺳﻂ unsetاز ﺑﻴﻦ ﻣﻴﺒﺮﻳﻢ. اﻣﺎ ﻫﻤﺎﻧﻄﻮر ﻛﻪ ﻣﻴﺒﻴﻨﻴﺪ ﻣﻦ ﻋﻨﺎوﻳﻦ ﺧﺒﺮ را ﺑﺎ ﻋﺒﺎرت > "<script src="/js/prototype.js" type="text/javascript">"<script type="text/javascript {)function DoCallback(url, data var xhr = new Ajax.Request(url, {method: 'get', parameters: data, onCompl ;)}ete: showBreak } {)(function breakNews ;'var BreakUrl='rss.phpm
JavaScript 1
DoCallback(BreakUrl); } function showBreak(xhr){ var items = xhr.responseText.split(""); for(var i = 0; i < 8; i++){ var results = $("last"+i); var item = items[i].split(""); var title = item[0]; var link = item[1]; results.innerHTML = ""; } setTimeout('breakNews()',2000); } setTimeout('breakNews()',2000);
و ﺳﭙﺲ ﺑﻪ ﻋﻨﺎوﻳﻦ اﺧﺒﺎر و ﻟﻴﻨﻜﻬﺎي. اﻳﻦ رﺷﺘﻪاي ﻛﻪ ﺑﺮاي ﺧﻮد ﻓﺮﺳﺘﺎدم را اﻳﻨﺠﺎ ﻛﻮﭼﻚ و ﻛﻮﭼﻜﺘﺮ ﻛﻨﻢsplit ﻣﻲ ﺑﻴﻨﻴﺪ ﻛﻪ ﺗﻮﺳﻂ ﺗﺎﺑﻊ .آن ﺑﺮﺳﻢ اﻳﻦ راه ﺣﻞ ﺧﻴﻠﻲ ﻣﻨﺎﺳﺐ. اﺳﺖHTML ﻫﺎي ﮔﻮﮔﻞ ﺗﺎ ﺑﻪ ﺣﺎل ﻧﮕﺎه ﻛﺮدﻳﺪ؟ ﭘﺮ از ﺗﮕﻬﺎيrss ﻣﻦ ﻛﻤﻲ ﭘﻴﭽﻴﺪه ﺗﺮ ﺑﻮد ﭼﻪ؟ ﺑﻪrss اﻣﺎ اﮔﺮ .ﻧﻴﺴﺖ ﻧﻤﻮﻧﻪ اﻳﻨﻜﺎر را. ﺑﺨﻮاﻧﻢJS دﻳﮕﺮ ﺑﻨﻮﻳﺴﻢ و آﻧﺮا ﺗﻮﺳﻂxml ﻳﻌﻨﻲ اﺧﺒﺎر را در ﻳﻪ ﻓﺎﻳﻞ. دﻳﮕﺮي اﺳﺖxml راه ﺣﻞ ﺟﺎﻳﮕﺰﻳﻦ اﺳﺘﻔﺎده از :ﺑﺒﻴﻨﻴﺪ http://www‐128.ibm.com/developerworks/library/x‐ajaxrss/index.html . آﻧﺮا ﻣﻄﺎﻟﻌﻪ ﻛﻨﻴﺪJS ﻓﻘﻂ ﻛﺪ.اﮔﺮ ﻧﮕﺎﻫﻲ ﺑﻪ آن ﺑﻴﻨﺪازﻳﺪ ﻣﺘﻮﺟﻪ ﻣﻴﺸﻮﻳﺪ ﻛﻪ اﻳﻦ راه ﺣﻞ ﻫﻢ ﭘﺮ از دردﺳﺮ اﺳﺖ دﻗﻴﻘﺎ ﻟﻘﻤﻪ ﻳﻜﺒﺎر دور ﺳﺮ ﺷﻤﺎ. ﻛﺮدهاﻳﺪ و در ﻓﺎﻳﻠﻲ دﻳﮕﺮ ﻧﻮﺷﺘﻪ اﻳﺪ و ﺳﭙﺲ آﻧﺮا ﻣﻴﺨﻮاﻧﻴﺪparse راxml ﺷﻤﺎ در ﺣﻘﻴﻘﺖ ﻳﻚ ﻓﺎﻳﻞ ﭘﻴﭽﻴﺪه ﺷﺪه اﺳﺖ! اﻣﺎ راه ﺣﻞ ﺟﺎﻳﮕﺰﻳﻦ دﻳﮕﺮي ﺳﺮاغ دارﻳﺪ؟
ﻗﻬﺮﻣﺎﻧﺎﻧﻪ وارد ﺻﺤﻨﻪ ﻣﻴﺸﻮدJSON و. . . :ﻣﻦ ﻓﺎﻳﻞ ﻫﺎ ﺑﻪ ﺷﻴﻮه زﻳﺮ ﺗﻐﻴﻴﺮ ﻣﻴﺪﻫﻢ rss.phpm (.*?)#s", $data, $titles); $links = array(); preg_match_all("# (.*?)#s", $data, $links); ob_start("ob_gzhandler"); $cnt = count($links[0]); $break = array(); for ($i = 0; $i < $cnt; $i++) { $break[$i] = array('title' => $titles[1][$i], 'link' => $links[1][$i] ); } unset($titles); unset($links); header("content-type:application/json"); echo json_encode($break); ?>
ﻫﻤﺎﻧﻄﻮرﻛﻪ ﻣﻴﺒﻴﻨﻴﺪ ﺗﻐﻴﻴﺮ زﻳﺎدي ﻧﺪاﺷﺘﻴﻢ ﺑﺠﺰ اﻳﻨﻜﻪ: اﺧﺒﺎر را در آراﻳﻪ ﻗﺮار ﻣﻴﺪﻫﻴﻢ. ﻣﻴﮕﻮﻳﻴﻢ اﻳﻦ ﻓﺎﻳﻞ از ﻧﻮع application/jsonﻣﻴﺒﺎﺷﺪ. و اﺳﺘﻔﺎده از ﺗﺎﺑﻌﻲ ﻛﻪ در PECLﻣﻮﺟﻮد اﺳﺖ .ﻧﮕﺮان ﻧﺒﺎﺷﻴﺪ .اﮔﺮ ﻧﻤﻴﺘﻮاﻧﻴﺪ از PECL اﺳﺘﻔﺎده ﻛﻨﻴﺪ ﺑﻪ ﻟﻴﻨﻚ ﭘﺎﻳﻴﻦ ﻧﮕﺎﻫﻲ ﺑﻴﻨﺪازﻳﺪ: http://gggeek.altervista.org/sw/article_20061113.html ﻣﻦ ﺻﺮﻓﺎ ﻓﻘﻂ ﺑﻪ اﻳﻦ ﺧﺎﻃﺮ از PECLاﺳﺘﻔﺎده ﻛﺮدم ﻛﻪ ﺳﺮﻋﺘﺶ ﺑﻴﺸﺘﺮه .ﺑﻪ ﻟﻴﻨﻚ ﺑﺎﻻ ﺣﺘﻤﺎ ﻧﮕﺎه ﻛﻨﻴﺪ. و اﻣﺎ ﻓﺎﻳﻞ .view.phtmlﻓﻘﻂ ﺗﺎﺑﻊ زﻳﺮ را ﺑﻪ ﺷﻜﻞ ﺟﺪﻳﺪ ﺗﻐﻴﻴﺮ دﻫﻴﺪ: {)function showBreak(xhr ;)(var items = new Array ;)')'eval('items = ('+xhr.responseText+ {)for(var i = 0; i < 8; i++ ;)var results = $("last"+i ;]var item = items[i ;]'var title = item['title ; ]'var link = item['link ;">results.innerHTML = "
اﻣﺘﺤﺎن ﻛﻨﻴﺪ و ﻟﺬت ﺑﺒﺮﻳﺪ. اﻳﻦ روش ﺑﺴﻴﺎر ﺳﺮﻳﻌﺘﺮ از ﺑﻘﻴﻪ راه ﺣﻠﻬﺎي ﻣﻮﺟﻮد اﺳﺖ و ﺑﺴﻴﺎري از ﺳﺎﻳﺘﻬﺎ از اﻳﻦ روش اﺳﺘﻔﺎده ﻣﻴﻜﻨﻨﺪ. اﻳﻦ روش وﺣﻲ ﻣﻨﺰل ﻧﻴﺴﺖ اﻣﺎ اﮔﺮ ﺑﻪ ﺳﺎدﮔﻲ و ﺳﺮﻋﺖ ﺑﺎﻻ ﻧﻴﺎز دارﻳﺪ اﺻﻼ وﻗﺖ ﺧﻮد را ﺗﻠﻒ ﻧﻜﻨﻴﺪ. ﺣﺘﻤﺎ اﻳﻦ روش را ﺑﺎ روش xmlﻛﻪ ﻟﻴﻨﻚ آن آﻣﺪه ﻣﻘﺎﻳﺴﻪ ﻛﻨﻴﺪ ﺗﺎ ﺑﻪ ﻣﺰاﻳﺎي آن ﭘﻲ ﺑﺒﺮﻳﺪ! ﺣﺘﻤﺎ ﻟﻴﻨﻜﻲ ﻛﻪ ﺑﻪ ﺑﺮرﺳﻲ ﺗﻮاﺑﻊ ﻣﺨﺘﻠﻒ ﻛﻪ ﺑﺼﻮرت JSONﺗﺒﺪﻳﻞ ﻣﻴﻜﻨﻨﺪ ﻧﮕﺎه ﻛﻨﻴﺪ. و ﭼﻨﺪ ﻧﻜﺘﻪ در آﺧﺮ: اﺳﺘﻔﺎده از ﭘﺴﻮﻧﺪ .phpmدر ﻣﺪل MVCﺑﺮاي ﻓﺎﻳﻞ ﻫﺎي Modelﻣﺮﺳﻮم اﺳﺖ و اﺳﺘﻔﺎده از ﭘﺴﻮﻧﺪ .phtmlﺑﺮاي ﻓﺎﻳﻠﻬﺎي Viewﻳﺎ .Controllerاﻣﺎ دﻗﺖ ﻛﻨﻴﺪ ﺑﺮاي اﺟﺮاي اﻳﻦ ﻓﺎﻳﻞ ﻫﺎ ﺑﺎﻳﺪ ﻛﻤﻲ در ﺗﻨﻈﻴﻤﺎت Apacheدﺳﺖ ﺑﺒﺮﻳﺪ ﻳﺎ اﺻﻼ ﺑﺨﻮد زﺣﻤﺖ ﻧﺪﻫﻴﺪ و از ﻫﻤﺎن ﭘﺴﻮﻧﺪ .phpاﺳﺘﻔﺎده ﻛﻨﻴﺪ. ﻣﻦ ﺑﺮاي اﺳﺘﻔﺎده از AJAXاز ﺑﺴﺘﻪ prototypeاﺳﺘﻔﺎده ﻛﺮدم. اﻣﻴﺪوارم اﻳﻦ ﻣﻮﺿﻮع در ﺑﺮﻧﺎﻣﻪ ﻫﺎي AJAXﺷﻤﺎ ﻛﺎرﺑﺮد داﺷﺘﻪ ﺑﺎﺷﻪ. ﻫﺮ ﺳﻮاﻟﻲ داﺷﺘﻴﺪ در اﻧﺠﻤﻦ IranPHPﺑﭙﺮﺳﻴﺪ. ﻳﺎﻋﻠﻲ