<?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>浩行天下 ghSky-&#62;Blog &#187; JavaScript</title>
	<atom:link href="http://ghsky.com/tag/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://ghsky.com</link>
	<description>热衷于前端技术 (X)HTML, CSS, JavaScript</description>
	<lastBuildDate>Sat, 24 Jul 2010 09:30:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
	<atom:link rel='hub' href='http://ghsky.com/?pushpress=hub'/>
		<item>
		<title>又是好久没写Blog</title>
		<link>http://ghsky.com/2010/05/long-time-no-update-blog.html</link>
		<comments>http://ghsky.com/2010/05/long-time-no-update-blog.html#comments</comments>
		<pubDate>Wed, 12 May 2010 15:53:52 +0000</pubDate>
		<dc:creator>ghSky</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://ghsky.com/?p=292</guid>
		<description><![CDATA[转眼一看上篇博客文章，又快2个月没有更新了，之前一直说要更新要更新，其实也有挺多技术文章想分享分享的，可是总是因为这样那样的原因都没来得及记录下来，真是比较惭愧啊~今天突然想想，再忙还是应该找时间来写一下啦，也算是练练手吧~之前记得看过一篇文章，上面说程序员应该具有的素质，其中一条就是说要保持写作，当然也包括写blog了，我想可能这就是要保持一种交流的能力，以及一种表达的能力吧~ 前段时间说要学习PHP，后来果真就把《PHP和MYSQL WEB开发》借来看了看，到不久前，其实已经大体浏览的一遍，不过自认为实际没掌握什么，因为没有项目经历，或者说是没有更多的实践机会，所以导致很多只是在眼前飘过，但实际并未掌握~其实一直也想找机会来实践实践的，因此也想找机会做个项目试试，不过到现在还没有实际去做点儿什么 不过一直和工作室吴迪有交流，他说PHP的很多特性比较恶心，当时没在意，不过后来想想说得的确有道理，最直接的一个就是各种函数的命名就是一个巨恶心的挑战，这里就不多说了，网上已经很多对PHP的评价的文章~后来一次偶然机会看到这个分享《Python于Web 2.0网站的应用》 就对Python产生了不少兴趣，后来和BlueF聊的时候，他也推荐我去看看Python，所以就在图书馆找了《Python核心编程》来看看~说实在的，在图书馆找本Python的书好困难啊，英文原版还有些，中文的基本就没有，要么就是被借走了，现在这本也是我找好久终于在一个角落找到的哈~当时还挺兴奋的就翻了不少看看~看到前面作者有说对于JavaScript的程序员，学习Python也比较简单，所以我现在也坚定了学习Python的信念，虽然PHP还是当前WEB开发的第一语言，不过自己只想了解了解就好，对于Python还是想能够掌握得深一些更好~目前《Python核心编程》已经看了数章了，感觉还不错，觉得Python这门语言的确是很需要强调Simple的语言，它独有的强制代码缩进方式也有不少优势，而且很多特性也比较有意思，比如这个写法[2 ** x for x in range(5)]，就可以简单的列举出2的0到4次方，再如(x, y) = (1, 2); (y, x) = (x, y)就能很方便的交换两个变量而不需要传统编程语言的方法，真是神奇哈~ 不过Python好多方式和JavaScript的确不大相同，所以在学习过程中我一定要注意和JS的对比，以便能够熟练掌握两门语言而不至于相互混淆~所以以后一定要多写写读书笔记才行啊~ 接着说说JavaScript方面的事儿吧，前段时间大军让我研究研究Web编辑器的技术，后来就看到不少文章，包括Range，Selection，execCommand等技术的东东，这方面之前真的接触太少太少了，很难马上就能搞定，后来自己又大体研究了研究Kissy Editor的代码，确实有不少收获，不仅包括前面那些自己接触甚少的技术，更是包括JavaScript架构方面的概念，感觉Kissy这个框架的架构方面的确有很多先进的地方需要我去理解，同时也真的发现接触的JavaScript越来也多，自己的无知也就暴露地更加明显，尤其是架构方面的东东，真是很匮乏啊~ 再接着说，5月初的时候，有了人生第一次面试经历吧，不过是电话面试哈，面试方是百度，也颇让自己有些压力，通过面试，发现自己在基础知识方面还是有不少漏洞啊，特别是很久没写页面，很多页面相关知识也是忘记得差不多了，面试过程中很多原来了解的东东，回答过程中也答得不满意，可能由于紧张吧，不过准确地说应该是自己掌握得还不足吧，不过总的来说面试还算顺利吧，貌似要等二面~最近一段时间，由于工作室另外一个项目的原因，需要去研究研究Googe Maps API，所以最近在研究这个东东，难度不算大吧，主要是看文档和实际运用，只是很感叹Google对API的设计强大、精巧，真的很难想像这些JavaScript是怎么实现的，真是膜拜得不行了~ 那天在图书馆，还顺便借了一本《版本控制之道》在看，之前项目中一直在使用，不过里面好多特性都没有用到，这次算是借书来过一遍吧，了解了解SVN的基本特性~ 差不多了，前段时间大概就这么样吧，总的来说还是很忙的，很多事儿要弄，也有很多知识自己得学，当然现在课也没逃多少，所以也就感觉比较忙啦~不过这应该就算是充实吧，希望自己在忙碌中有条不紊地进步吧~]]></description>
			<content:encoded><![CDATA[<p>转眼一看上篇博客文章，又快2个月没有更新了，之前一直说要更新要更新，其实也有挺多技术文章想分享分享的，可是总是因为这样那样的原因都没来得及记录下来，真是比较惭愧啊~今天突然想想，再忙还是应该找时间来写一下啦，也算是练练手吧~之前记得看过一篇文章，上面说程序员应该具有的素质，其中一条就是说要保持写作，当然也包括写blog了，我想可能这就是要保持一种交流的能力，以及一种表达的能力吧~</p>
<p>前段时间说要学习PHP，后来果真就把<a href="http://book.douban.com/subject/3549421/" target="_blank">《PHP和MYSQL WEB开发》</a>借来看了看，到不久前，其实已经大体浏览的一遍，不过自认为实际没掌握什么，因为没有项目经历，或者说是没有更多的实践机会，所以导致很多只是在眼前飘过，但实际并未掌握~其实一直也想找机会来实践实践的，因此也想找机会做个项目试试，不过到现在还没有实际去做点儿什么 <img src='http://ghsky.com/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' /> 不过一直和工作室吴迪有交流，他说PHP的很多特性比较恶心，当时没在意，不过后来想想说得的确有道理，最直接的一个就是各种函数的命名就是一个巨恶心的挑战，这里就不多说了，网上已经很多对PHP的评价的文章~后来一次偶然机会看到这个分享<a href="http://www.slideshare.net/hongqn/qcon2010-3881323" target="_blank">《Python于Web 2.0网站的应用》 </a>就对Python产生了不少兴趣，后来和<a href="http://bluef.org/wp/" target="_blank">BlueF</a>聊的时候，他也推荐我去看看Python，所以就在图书馆找了<a href="http://book.douban.com/subject/3112503/" target="_blank">《Python核心编程》</a>来看看~说实在的，在图书馆找本Python的书好困难啊，英文原版还有些，中文的基本就没有，要么就是被借走了，现在这本也是我找好久终于在一个角落找到的哈~当时还挺兴奋的就翻了不少看看~看到前面作者有说对于JavaScript的程序员，学习Python也比较简单，所以我现在也坚定了学习Python的信念，虽然PHP还是当前WEB开发的第一语言，不过自己只想了解了解就好，对于Python还是想能够掌握得深一些更好~目前<a href="http://book.douban.com/subject/3112503/" target="_blank">《Python核心编程》</a>已经看了数章了，感觉还不错，觉得Python这门语言的确是很需要强调Simple的语言，它独有的强制代码缩进方式也有不少优势，而且很多特性也比较有意思，比如这个写法[2 ** x for x in range(5)]，就可以简单的列举出2的0到4次方，再如(x, y) = (1, 2); (y, x) = (x, y)就能很方便的交换两个变量而不需要传统编程语言的方法，真是神奇哈~ <img src='http://ghsky.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':biggrin:' class='wp-smiley' /> 不过Python好多方式和JavaScript的确不大相同，所以在学习过程中我一定要注意和JS的对比，以便能够熟练掌握两门语言而不至于相互混淆~所以以后一定要多写写读书笔记才行啊~</p>
<p>接着说说JavaScript方面的事儿吧，前段时间<a href="http://www.webbw.com/" target="_blank">大军</a>让我研究研究Web编辑器的技术，后来就看到不少文章，包括Range，Selection，execCommand等技术的东东，这方面之前真的接触太少太少了，很难马上就能搞定，后来自己又大体研究了研究<a href="http://kissy.googlecode.com/svn/trunk/src/editor/demo/basic.html" target="_blank">Kissy Editor</a>的代码，确实有不少收获，不仅包括前面那些自己接触甚少的技术，更是包括JavaScript架构方面的概念，感觉Kissy这个框架的架构方面的确有很多先进的地方需要我去理解，同时也真的发现接触的JavaScript越来也多，自己的无知也就暴露地更加明显，尤其是架构方面的东东，真是很匮乏啊~ <img src='http://ghsky.com/wp-includes/images/smilies/icon_sad.gif' alt=':sad:' class='wp-smiley' /> 再接着说，5月初的时候，有了人生第一次面试经历吧，不过是电话面试哈，面试方是百度，也颇让自己有些压力，通过面试，发现自己在基础知识方面还是有不少漏洞啊，特别是很久没写页面，很多页面相关知识也是忘记得差不多了，面试过程中很多原来了解的东东，回答过程中也答得不满意，可能由于紧张吧，不过准确地说应该是自己掌握得还不足吧，不过总的来说面试还算顺利吧，貌似要等二面~最近一段时间，由于工作室另外一个项目的原因，需要去研究研究<a href="http://code.google.com/apis/maps/" target="_blank">Googe Maps API</a>，所以最近在研究这个东东，难度不算大吧，主要是看文档和实际运用，只是很感叹Google对API的设计强大、精巧，真的很难想像这些JavaScript是怎么实现的，真是膜拜得不行了~ <img src='http://ghsky.com/wp-includes/images/smilies/icon_razz.gif' alt=':razz:' class='wp-smiley' /> </p>
<p>那天在图书馆，还顺便借了一本<a href="http://book.douban.com/subject/2038779/" target="_blank">《版本控制之道》</a>在看，之前项目中一直在使用，不过里面好多特性都没有用到，这次算是借书来过一遍吧，了解了解SVN的基本特性~</p>
<p>差不多了，前段时间大概就这么样吧，总的来说还是很忙的，很多事儿要弄，也有很多知识自己得学，当然现在课也没逃多少，所以也就感觉比较忙啦~不过这应该就算是充实吧，希望自己在忙碌中有条不紊地进步吧~ <img src='http://ghsky.com/wp-includes/images/smilies/icon_smile.gif' alt=':smile:' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://ghsky.com/2010/05/long-time-no-update-blog.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>JavaScript 数组、Object对象for循环效率对比</title>
		<link>http://ghsky.com/2009/05/compare-with-array-object-for-loop-efficiency-in-javascript.html</link>
		<comments>http://ghsky.com/2009/05/compare-with-array-object-for-loop-efficiency-in-javascript.html#comments</comments>
		<pubDate>Thu, 21 May 2009 14:27:04 +0000</pubDate>
		<dc:creator>ghSky</dc:creator>
				<category><![CDATA[Web Develop]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ghsky.com/?p=274</guid>
		<description><![CDATA[原来小航子（山山）跟我说过，多用object对象少用数组对象，因为object的效率要高一些，今天刚好在写一个JS的遇到了一个用数组还是用对象的问题，所以就简单写了测试页面。 详见：http://ghsky.com/demo/090521/test_js_for.html 实验内容：测试内容主要是for循环，因为一般数组都是用for循环来遍历数组元素，而object对象则应该用for..in循环来遍历对象元素，所以主要测试思路就是给object和数组填充大量元素，然后分别测试他们遍历、输出的消耗时间。 实验方法：简单说一下实施方法，首先通过一个随机生成字符串的函数（每次生成字符串长度在0-200个字符间），然后分别将生成字符串存到object对象和数组对象中（通常要生成1000个上述字符串），然后用innerHTML方法在页面中输出，计算遍历、输出时间。 说明：考虑用innerHTML方法输出是因为效率比DOM方法高很多，而且这种效率提高有助于高效检测，其次迭代输出的时候用了 innerHTML += 的方法，虽然这样效率很低，应该考虑用存到一个数组然后在.join('')生成字符串输出，但是考虑到将object转存数组也有大量时间消耗，所以索性就选择 innerHTML += 的方法输出。 警告：由于此测试页面计算量很大，容易造成浏览器占用较高CPU，同时浏览器假死现象也可能出现，因此在进行测试的时候请确保浏览器没有打开未保存页面或没有进行其他有可能造成损失的操作！ 结论：1.经过几次简单的测试，发现通常情况下数组for循环效率要高于object for-in循环，且有时效率甚至高于50%以上，但是测试也发现，相反的结果页可能出现几次，但总体来看数组循环的效率是要高于object对象的for-in循环； 2.同时经过不同浏览器的测试，发现对于各浏览器的JavaScript引擎来说，Chrome 2的V8引擎最优秀，平均耗时很低，且假死现象轻微；其次是Opera，9.6它的速度和Chrome相对，稍慢一些，不过稳定性不如Chrome，过程中会出现“未响应”情况；第三应该是Safari 4 Beta，运算速度稍慢于Opera，但是较为稳定；第四应该归属IE8，运算速度慢于以上各浏览器，不过没有假死现象；最后是Firefox 3.0.10，速度最慢，通常比IE8还慢很多，有时比IE8慢达200%！！看来Firefox 3.0的JavaScript引擎仍需提高啊~ 最后此种测试方法可能存在缺陷，欢迎各位DX拍砖，同时也欢迎各位博友在留言中回复两项测试的时间，谢谢~]]></description>
			<content:encoded><![CDATA[<p>原来<a href="http://hi.baidu.com/dreamflywang" target="_blank">小航子（山山）</a>跟我说过，多用object对象少用数组对象，因为object的效率要高一些，今天刚好在写一个JS的遇到了一个用数组还是用对象的问题，所以就简单写了测试页面。</p>
<p><strong>详见：</strong><a href="http://ghsky.com/demo/090521/test_js_for.html">http://ghsky.com/demo/090521/test_js_for.html</a></p>
<p><strong>实验内容：</strong>测试内容主要是for循环，因为一般数组都是用for循环来遍历数组元素，而object对象则应该用for..in循环来遍历对象元素，所以主要测试思路就是给object和数组填充大量元素，然后分别测试他们遍历、输出的消耗时间。</p>
<p><strong>实验方法：</strong>简单说一下实施方法，首先通过一个随机生成字符串的函数（每次生成字符串长度在0-200个字符间），然后分别将生成字符串存到object对象和数组对象中（通常要生成1000个上述字符串），然后用innerHTML方法在页面中输出，计算遍历、输出时间。</p>
<p><strong>说明：</strong>考虑用innerHTML方法输出是因为效率比DOM方法高很多，而且这种效率提高有助于高效检测，其次迭代输出的时候用了 innerHTML += 的方法，虽然这样效率很低，应该考虑用存到一个数组然后在.join('')生成字符串输出，但是考虑到将object转存数组也有大量时间消耗，所以索性就选择 innerHTML += 的方法输出。</p>
<p><strong>警告：</strong>由于此测试页面计算量很大，容易造成浏览器占用较高CPU，同时浏览器假死现象也可能出现，因此在进行测试的时候请确保浏览器没有打开未保存页面或没有进行其他有可能造成损失的操作！</p>
<p><strong>结论：</strong>1.经过几次简单的测试，发现通常情况下数组for循环效率要高于object for-in循环，且有时效率甚至高于50%以上，但是测试也发现，相反的结果页可能出现几次，但总体来看数组循环的效率是要高于object对象的for-in循环；<br />
2.同时经过不同浏览器的测试，发现对于各浏览器的JavaScript引擎来说，Chrome 2的V8引擎最优秀，平均耗时很低，且假死现象轻微；其次是Opera，9.6它的速度和Chrome相对，稍慢一些，不过稳定性不如Chrome，过程中会出现“未响应”情况；第三应该是Safari 4 Beta，运算速度稍慢于Opera，但是较为稳定；第四应该归属IE8，运算速度慢于以上各浏览器，不过没有假死现象；最后是Firefox 3.0.10，速度最慢，通常比IE8还慢很多，有时比IE8慢达200%！！看来Firefox 3.0的JavaScript引擎仍需提高啊~</p>
<p>最后此种测试方法可能存在缺陷，欢迎各位DX拍砖，同时也欢迎各位博友在留言中回复两项测试的时间，谢谢~</p>
]]></content:encoded>
			<wfw:commentRss>http://ghsky.com/2009/05/compare-with-array-object-for-loop-efficiency-in-javascript.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>利用 JSONP 进行 JavaScript 的跨域数据访问</title>
		<link>http://ghsky.com/2009/05/jsonp-cross-domain-data-access-with-javascript.html</link>
		<comments>http://ghsky.com/2009/05/jsonp-cross-domain-data-access-with-javascript.html#comments</comments>
		<pubDate>Thu, 21 May 2009 05:18:14 +0000</pubDate>
		<dc:creator>ghSky</dc:creator>
				<category><![CDATA[Web Develop]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[JSONP]]></category>

		<guid isPermaLink="false">http://ghsky.com/?p=266</guid>
		<description><![CDATA[原文来自：http://hpyer.cn/visit-remote-data-with-jsonp-in-javascript.html 一、基础知识 　　1、什么是 JSON：JavaScript Object Notation (JSON) 是一种轻量级、基于文本、语言无关的数据交换格式。它是从 ECMAScript 语言标准衍生而来的。JSON为轻便的表示结构化数据，定义了一小套格式化规则。以下是一个 JSON 对象的例子： { "Image": { "Width": 450, "Height": 561, "Title": "Intel Core 2 Duo", "Thumbnail": { "Url": "http://www.example.com/image/...", "Height": 125, "Width": "100" }, "IDs": [116, 943, 234, 38793] } } 　　2、什么是 JSONP：JSONP（JSON with Padding）是一个非官方的协议，它允许在服务器端集成 Script tags 返回至客户端，通过 Javascript callback 的形式实现跨域访问（这仅仅是 JSONP 简单的实现形式）。 二、JSONP 的原理 　　首先说明一下，想要使用 [...]]]></description>
			<content:encoded><![CDATA[<p>原文来自：<a href="http://hpyer.cn/visit-remote-data-with-jsonp-in-javascript.html" target="_blank">http://hpyer.cn/visit-remote-data-with-jsonp-in-javascript.html</a></p>
<p>一、基础知识</p>
<p>　　1、什么是 <a href="http://www.json.org/" target="_blank">JSON</a>：JavaScript Object Notation (JSON) 是一种轻量级、基于文本、语言无关的数据交换格式。它是从 ECMAScript 语言标准衍生而来的。JSON为轻便的表示结构化数据，定义了一小套格式化规则。以下是一个 JSON 对象的例子：</p>
<pre class="brush:js">
{
    "Image": {
        "Width": 450,
        "Height": 561,
        "Title": "Intel Core 2 Duo",
        "Thumbnail": {
            "Url": "http://www.example.com/image/...",
            "Height": 125,
            "Width": "100"
        },
        "IDs": [116, 943, 234, 38793]
    }
}
</pre>
<p>　　2、什么是 JSONP：JSONP（JSON with Padding）是一个非官方的协议，它允许在服务器端集成 Script tags 返回至客户端，通过 Javascript callback 的形式实现跨域访问（这仅仅是 JSONP 简单的实现形式）。<br />
<span id="more-266"></span><br />
二、JSONP 的原理</p>
<p>　　首先说明一下，想要使用 JSONP 来进行跨域访问，必须服务器端支持，原因后面再解释。和 AJAX 一样，JSONP 实际上也是早已存在，只是说法相对比较新颖（貌似也出来很久了，额…），而且所有做网页开发肯定都用过。为什么这么说？应为它用到的只是所有 HTML 元素中一个简单的 script 元素。看到这是不是觉得越发奇怪了？没关系，继续看下去就会茅厕（塞）顿开的，嘿嘿～来看个例子吧：<br />
<a href="http://ghsky.com/demo/090521/jsonp-demo.html" target="_blank">jsonp-demo.html</a> 文件</p>
<pre class="brush:html">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />

</head>
<body>
    <script type="text/javascript">
    //<![CDATA
        function say(words) {
            alert(words);
        }
    //]]&gt;
    </script>
    <script type="text/javascript" src="jsonp-demo.js"></script>
</body>
</html>
</pre>
<p><a href="http://ghsky.com/demo/090521/jsonp-demo.js" target="_blank">jsonp-demo.js</a> 文件</p>
<pre class="brush:js">
var now = new Date();
say('Time is ' + now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds());
</pre>
<p>　　运行 jsonp-demo.html 文件后，是不是看到写着“Time is XX:XX:XX”的警告框了（XX:XX:XX为你系统当前时间）？你可能会觉得这个例子很简单，没什么了不起的，甚至会在想：这和 JSONP 有关系吗？那么，我可以很肯定的告诉你：有关系！而且，这个例子实际上就是 JSONP 的原型！你也许会想到，JSONP 不是访问远程数据的吗？对，试想一下，如果 jsonp-demo.js 文件在其它域的服务器上呢？结果会不会出现问题？我也可以很负责的告诉你：不会！你可以将上面例子中的 jsonp-demo.js 更改为：http://ghsky.com/demo/090521/jsonp-demo.php?callback=say <a href="http://ghsky.com/demo/090521/jsonp-demo-php.html" target="_blank">再试一下</a>。<br />
　　现在，聪明的你应该已经明白 JSONP 到底是怎么回事了，那么，再来解释一下本节开头第一句话吧。看过 jsonp-demo.js 文件的内容，应该知道，其只是对一个函数（通常称之为：回调函数）的调用，而需要交互的数据则通过参数形势进行返回。所以通过 JSONP 访问的服务器需要提供一个可以设置回调函数名的接口，就像 http://ghsky.com/demo/090521/jsonp-demo.php?callback=say 中的 callback，所以，综上所述 JSONP 是需要服务器端的支持的。</p>
<p>附上 jsonp.php 的源码：</p>
<pre class="brush:php">
<?php
$type = isset($_GET['type']) ? $_GET['type'] : '';
$callback = isset($_GET['callback']) ? $_GET['callback'] : '';
$json = '';

if ($type == 'json') {
    $json = '{
        "Image": {
            "Width": 450,
            "Height": 561,
            "Title": "Intel Core 2 Duo",
            "Thumbnail": {
                "Url": "http://www.example.com/image/...",
                "Height": 125,
                "Width": "100"
            },
            "IDs": [116, 943, 234, 38793]
        }
    }';
} else {
    $time = date("H:i:s");
    $json = '"Time is '. "$time" . '"';
}

if (!empty($callback)) {
    $json = $callback . '(' . $json . ')';
}

print $json;
?>
</pre>
<p>三、jQuery 中的应用</p>
<p>　　自 1.2 版本起，<a href="http://jquery.com/" target="_blank">jQuery</a> 加入了对 JSONP 的支持。我们可以很容易的利用 $.getJSON() 方法（或者其它基于 $.ajax() 的方法），来跨域加载 JSON 数据。<br />
来个例子吧<a href="http://ghsky.com/demo/090521/jsonp-demo-2.html" target="_blank">jsonp-demo-2.html</a>：</p>
<pre class="brush:html">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />

    <script type="text/javascript" src="jquery.js"></script>
</head>
<body>
    <script type="text/javascript">
    //<![CDATA
        function do_jsonp() {
            $.getJSON('http://ghsky.com/demo/090521/jsonp-demo.php?type=json&#038;callback=?',
            function(data) {
                $('#result').val('data.Image.IDs: ' + data.Image.IDs);
            });
        }
    //]]&gt;
    </script>
    <a href="javascript:do_jsonp();">Click me</a>
    <textarea id="result" cols="50" rows="5"></textarea>
</body>
</html>
</pre>
<p>　　你可能注意到上面的例子中，url 被写成了 http://ghsky.com/demo/090521/jsonp-demo.php?type=json&#038;callback=?，需要说明的是，这个问号会被 jQuery 自动替换为回调函数的函数名（如果是一个匿名函数，jQuery 会自动生成一个带时间戳的函数名）。</p>
<p>四、小结</p>
<p>　　通过本文的描述，相信你对于 JSONP 有了一个比较直观的了解，<a href="http://hpyer.cn/about" target="_blank">Hpyer</a> 也相信，你也肯定可以举一反三的写出属于你自己的代码。其实，JSONP 的实现方法并不是只有回调函数一种，还有其它方式，例如将数据赋值给一个变量等。在 Web 2.0 的总体趋势之下，JS 显得越来越重要，并成了许多网页制作者所必学的一种脚本，所以，尽情的去体会 JS 带来的乐趣吧，Enjoy it!</p>
]]></content:encoded>
			<wfw:commentRss>http://ghsky.com/2009/05/jsonp-cross-domain-data-access-with-javascript.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
