【转载】说说JSON和JSONP,跨域请求原理

 前言:

由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现。

当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socket通讯和本地数据库功能,又或者通过HTML5的WebSocket也可以实现与服务器的通讯和服务端推功能,但这两种方式都有其局限性,前者需要PhoneGap支持,后者要求用户设备必须支持WebSocket,因此都不能算是ST2的原生解决方案,原生的只有AJAX。

说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服务器端代理来解决。

但到目前为止最被推崇或者说首选的方案还是用JSON来传数据,靠JSONP来跨域。而这就是本文将要讲述的内容。

JSON和JSONP虽然只有一个字母的差别,但其实他们根本不是一回事儿:JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议。我们拿最近比较火的谍战片来打个比方,JSON是地下党们用来书写和交换情报的“暗号”,而JSONP则是把用暗号书写的情报传递给自己同志时使用的接头方式。看到没?一个是描述信息的格式,一个是信息传递双方约定的方法。

既然随便聊聊,那我们就不再采用教条的方式来讲述,而是把关注重心放在帮助开发人员理解是否应当选择使用以及如何使用上。

继续阅读

写给.NET程序员,不要困在自己建造的盒子里(转)

此文章的主旨是希望过于专注.NET程序员在做好工作、写好.NET程序的同时,能分拨出一点时间接触一下.NET之外的东西(例如10%-20%的时间),而不是鼓动大家什么都去学最后什么都学不精,更不是说.NET不行或劝大家放弃.NET。恕我愚钝,此主旨在文中表达不够清楚,看评论中很多朋友误解了,特此说明。

另外,本文中的观点并不全部是我个人的想法,相当一部分来自我以前聊过天的某些大牛,他们很多来自微软、百度、腾讯等知名企业,并且很多已经成为技术骨干,我曾经从他们那里受益匪浅,于是我把他们的指教结合自身的经验和理解写成此文。这就是此文的来源。
继续阅读

(转)做技术的感悟。

在博客园看到这篇文章,感觉很有道理,故转过来。

又来献丑。本来想写些关于技术方面在面试的可笑问题。不过收到一封邮件,主要就是一些网站好不好和赚钱的的一些问题,所以想下,写下这些问题很有意义。

一般对于一个职业的Coder来说主要薪水主要有三个部分。月薪水,项目奖金和一些年终奖福利这里。部分高端的职位有年底分红和奖金。当然还有一些有单子赚外快。这个范围大概在月薪2K – 32K之内。当然据说在这个之上的也有 不过我没见过。(估计园子在这之上的就有,大牛啊 羡慕)。对于只是工作得来的薪资来说 这个算是中上。有人不信,我有个亲戚在中央工作的一些公务员也就这个水平。技术人员一般薪资稳定,所以就缺少一些激情文化。在这个CPI,房价一路狂奔的年代,这点也能买房子,不过还清差不多要脱一层皮,再加上户口社保以及养老医疗等诸多的问题,大家都很浮躁。 继续阅读

服务器返回状态码

HTTP 400 – 请求无效
HTTP 401.1 – 未授权:登录失败
HTTP 401.2 – 未授权:服务器配置问题导致登录失败
HTTP 401.3 – ACL 禁止访问资源
HTTP 401.4 – 未授权:授权被筛选器拒绝
HTTP 401.5 – 未授权:ISAPI 或 CGI 授权失败
HTTP 403 – 禁止访问
HTTP 403 – 对 Internet 服务管理器 (HTML) 的访问仅限于 Localhost
HTTP 403.1 禁止访问:禁止可执行访问 继续阅读

Android桌面widgets和AppWidget框架(译)

【Android开发者】aimself

本文翻译自Android Developers Blog:Introducing home screen widgets and the AppWidget framework

Android 1.5 SDK一个令人兴奋的新特性是AppWidget framework,这个框架允许开发者开发widgets,这些widgets可以被用户拖到用户的桌面并且可以交互。widgets可以提供一个full-featured apps的预览,例如可以显示即将到来的日历事件,或者一首后台播放的歌曲的详细信息。

当widgets被拖到桌面上,他们被指定一个保留的空间来显示应用提供的自定义内容。用户可以通过这个widget来和你的应用交互,例如暂停或切换歌曲。如果你有一个后台服务,你可以按照你自己的schedule更新你的widget,或者使用AppWidget framework提供的一个自动的更新机制。

在更高层次上,每个widget就是一个BroadcastReceiver,他们用XML metadata来描述widget的细节。AppWidget framework通过broadcast intents和你的widget通信,例如当需要更新的时候。Widget更新使用RemoteViews被构建和发送。这个RemoteViews被包装成一个layout和特定内容来显示到桌面上。 继续阅读

“iconv() : Detected an illegal character in input string”的解决办法

PHP传给JS字符串用ecsape转换加到url里,又用PHP接收,再用网上找的unscape函数转换一下,这样得到的字符串是UTF-8的,但我需要的是GB2312,于是用iconv转换,开始是这样用的
$str = iconv(‘UTF-8’, ‘GB2312’, unescape(isset($_GET[‘str’])? $_GET[‘str’]:”));
上线后报一堆这样的错:iconv() : Detected an illegal character in input string

考虑到GB2312字符集比较小,换个大的吧,于是改成GBK:
$str = iconv(‘UTF-8’, ‘GBK’, unescape(isset($_GET[‘str’])? $_GET[‘str’]:”));
上线后还是报同样的错! 继续阅读

Apache服务器使用.htaccess实现图片防盗链

      .htaccess文件将影响其所在的目录及其子目录,因此,如果我们要保护的内容位于网站内多个目录下,可以考虑将其放在根目录下;而如果图片有单独的子目录如“/images/”,则只需将其放置在该目录下(当然也可以放到根目录中)。

      需要注意的是,如果通过FTP方式将创建好的.htaccess上传到服务器上,传输模式应为ASCII而非Binary。上传到服务器后,应将其属性通过CHMOD修改为644 或“RW-R–R–”,这样,可以保证服务器能够使用同时无法通过浏览器修改,当然,.htaccess的可读属性也存在一定的风险:攻击者可通过它找出您要保护的对象或认证文件位置——解决办法是将认证文件.htpasswd放到网站根目录之外,这样,便无法通过网络找到它了。
使用.htaccess禁止盗链
继续阅读