Json能够应用在许多场合,包括PHP本身就提供了对Json的反序列化操作。事实上,Json在传送大量数据时本身是存在溢出的,所以在设计时服务端要尽量避免输出大量Json数据。要达到前后台分离设计,使用Json通信最好不过了,因为主流的UI设计框架都对Json提供了完善的支持,下面将以Jquery为基础,详细介绍Ajax与Json的开发过程。由于使用Jsonp进行异步获取数据,所以Ajax异步通信变得简单。......
2023-11-04
Json是一种轻量级的数据交换格式,它的英文全称为JavaScript Object Notation。Json使用JavaScript对象语法,能够以简单的语法格式对JavaScript对象进行表示。虽然其中带有JavaScript名称,但事实上Json是一种独立的开放式的数据交互格式,在主流的语言或框架中均提供有相应的Json序列化及反序列化类库。
Json与XML类似,都是进行数据交互的常用格式,并且都支持本地与Ajax远程通信(Json需借助于Jsonp协议),但是Json不需要定义标签,数据得到极大地压缩,所以相对来讲Json比XML传输效率更加出色。同时由于Json本质上是一种序列化文本,所以Json不需要特定的解释引擎,在JavaScript脚本中甚至只需要使用for语句或eval()函数也可以对数据进行提取。
正是由于Json的简单、轻巧及稳定,近年来已被各大网站纷纷使用,典型的应用有网站开放API、UI前后台分离、Ajax异步请求等。对于PHP开发人员而言,使用Json是非常方便的,PHP 5.x本身就内置了json_encode及json_decode函数,用于实现数组数据序列化及反序列化。下面将结合ThinkPHP深入介绍Json在MVC开发中的实际应用。
1.json_encode函数
json_encode函数是PHP 5.x内置的一个标准函数,该函数用于实现对数组进行Json格式序列化。json_encode的使用非常简单,如以下代码所示。
json_encode只能接受utf-8编码的数据,如果当前文档不为utf-8,需要使用iconv等函数进行编码转换。上述代码的转换结果如下代码所示。
可以看到,json_conde函数将标准的数组信息转换为了紧凑的字符串信息,这种被序列化后的字符串也是使用键值对来描述的,例如age的键值为20,使用“:”进行分隔(相等于数组中的=>),多个键值对之间使用“,”分开。可以看到Json没有标签或节点的概念,所有数据都是序列化后的键值对,这无论对开发效率还是传输效率都是非常高效的。
2.ajaxReturn方法
ajaxReturn方法前面已经有过深入地介绍,在此不再重述。ajaxReturn默认情况下就是返回Json格式数据,能够方便地与前台Ajax实现高效互动,如以下代码所示。(www.chuimin.cn)
上述代码的运行结果如下代码所示。
与生成xml数据一样,status、info及data这3个Json序列键都是系统自动生成的,方便Ajax编程。其中status表示状态;info表示提示信息;data用于存放序列化后的数组数据。Json与数组一样,支持多维嵌套,例如data键对应的值就是一个Json序列,所以直接输出select结果也是允许的,如以下代码所示。
3.实现Jsonp
前面已经提到过Json实现本地和远程Ajax通信是基于Jsonp的。Jsonp是一种通信方式,这一点初学者往往将其与Json混淆,事实上它们是两个完全不同的概念,简单地说Jsonp是通信方式,Json是数据格式。用过Ajax编程的读者应该了解Ajax默认情况下是不允许跨域请求的,所以要实现与远程(跨域名)的xml、JavaScript、html等数据进行通信,必须设置请求代理,例如实现iframe、本地储存等或者添加同源组策略(适用于Windows)。好在现在的JavaScript面向对象编程全部封装了这些操作(包括各种框架,例如jquery、extjs等),开发人员需要做的步骤其实非常少。但Json不同,Json是一种序列化的数据(相当于纯文本),所以本身不具备跨域通信的能力(没有用于代理回调的标记),为了解决Json跨域通信的问题,所以Jsonp就应运而生了。
Jsonp请求数据时,会在url追加cakebale回调函数,Json数据必须回应该函数,才能绕过浏览器的安全策略,实现跨域通信。所以要让json_encode序列化的Json能够用于跨域处理,只需要加入回调函数标识即可,如以下代码所示。
将上述自定义函数保存到Common.php文件中,在控制器动作中直接调用即可,如以下代码所示。
在Ajax异步请求时只需要为callback传入回调标识名称,即可实现Jsonp通信。假设传递的callback标识名称为datas,那么最终的Json数据格式如下代码所示。
Jsonp能够轻松地实现Ajax异步请求,关于Jsonp的实际应用,接来下将结合JavaScript进行简单介绍。
有关PHP MVC开发实战的文章
Json能够应用在许多场合,包括PHP本身就提供了对Json的反序列化操作。事实上,Json在传送大量数据时本身是存在溢出的,所以在设计时服务端要尽量避免输出大量Json数据。要达到前后台分离设计,使用Json通信最好不过了,因为主流的UI设计框架都对Json提供了完善的支持,下面将以Jquery为基础,详细介绍Ajax与Json的开发过程。由于使用Jsonp进行异步获取数据,所以Ajax异步通信变得简单。......
2023-11-04
ajaxReturn方法返回结果受DEFAULT_AJAX_RETURN配置项影响,默认值为json,可选的值有json、eval及xml。表9-1 ajaxReturn方法参数Model类中的select或find方法返回的数组原本就是关联数组数据,所以ajaxReturn能够很好地将结果转换为XML文档,如以下代码所示。......
2023-11-04
PHP 5后的版本借鉴了大量Java思想,得益于早期PHP面向过程编程支持,PHP在实现MVC设计中变得较灵活、易用。但是随着PHP 5.x的到来,各种MVC框架的出现,尤其Zend推出的Zend Framework,彻底地改变了PHP状况,使得PHP也能够实现优雅的Web编程。MVC设计模式将使代码将变得简洁。但是在MVC设计模式中,Index称为动作。当然,MVC只是一种设计模式,在开源的PHP编程世界中,已经拥有众多的MVC编程框架。......
2023-11-04
前面已经简单介绍过ThinkPHP视图引擎,这些标签处理机制类似于JSP tag,使用XML作为标签的渲染方式,开发人员可以方便地在网页中嵌入XML标签,然后由ThinkPHP视图引擎解释成标准的PHP代码。ThinkPHP的视图引擎之所以高效,主要体现在它的标签扩展性。ThinkPHP的视图标签扩展性够完美地与后台控制器代码相结合,例如在Smarty中使用函数功能,首先需要在后台PHP代码注册,而在ThinkPHP中完全不需要,如以下代码所示。......
2023-11-04
系统共支持7种模式扩展,下面将分别对最常用的几种模式进行介绍。表11-1 CURD操作接口如表11-1所示,参数$data表示传入或返回的数据信息;参数$options表示返回当前操作的模型名称及表前缀。......
2023-11-04
Eclipse是IBM的一个商业项目,2001年11月起IBM将Eclipse贡献给开源社区,从此奠定了Eclipse的地位。Eclipse通过PDT插件来提供PHP开发支持,Eclipse PDT能够让编写PHP变得简单和高效,下面将介绍Eclipse PDT的安装和使用。Eclipse PDT的安装有两种方式,一种是直接通过Eclipse的扩展进行安装;另一种是下载带PDT插件的Eclipse。下面将以Eclipse3.5.2作为基础,讲解Eclipse PDT插件的安装过程。如果下载带PDT插件的Eclipse,只需要双击Eclipse启动程序即可,此时Eclipse就提供了完美的PHP编程支持。......
2023-11-04
图12-2 SOAP服务如果服务没有开启,需要在PHP配置文件中开启,如以下代码所示。其中参数1表示SOA服务描述文件,即WSDL文件,该文件是SOAP通信的核心;参数2表示SOAP协议版本,常用的版本有1.0及1.2,本章内容及示例全部基于SOAP 1.2版本实现。使用普通的Firebug等插件不能获取到异常信息,而断点调试是PHP的弱项,所以调试问题将会是SOAP开发首要面对的问题。......
2023-11-04
下面通过示例代码,演示Cookie函数的实际应用。Cookie能够存放包括中文在内的字符,但长度需要控制在225个字符之内。通过前面的学习,相信读者已经能够掌握Session及Cookie的操作了。虽然Cookie存放于客户端,但是并不意味着Cookie不适合用于会员验证等场景。所以很多网站会使用加密的方式存放Cookie用户名及密码,甚至结合软件与硬件签名实现高度安全的Cookie。总而言之,使用Cookie存放登录数据是可行的,但要做好加密与解密相关操作。......
2023-11-04
相关推荐