PHP+Smarty 环境下Ajax 中文查询的研究

龙源期刊网 http://www.qikan.com.cn

PHP+Smarty 环境下Ajax 中文查询的研究

作者:黄玲娜

来源:《电脑知识与技术》2015年第26期

摘要:Ajax技术被广泛应用于网页开发过程,可以实现无刷新与数据库交互,大大节约了数据搜索的时间、提高了搜索的效率。但是由于Ajax技术默认UTF-8编码方式,在开发网站过程中,很有可能由于编码问题导致中文查询实现不了的情形。在编码方式统一的前提下,运用encodeURI()函数能有效地解决问题,实现中文查询。 关键词:中文查询;Smarty模板;Ajax技术;PHP

中图分类号:TP311.1 文献标识码:A 文章编号:1009-3044(2015)26-0071-02 Research on Chinese Query using Ajax Technology in PHP and Smarty Environment HUANG Ling-na

(Wuxi City College of Vocational Technology,Wuxi 214000,China)

Abstract:Ajax technology is widely used in the process of web development, it can achieve no refresh and database interaction, greatly saving the time of data search, improve the efficiency of the search. However, due to the default Ajax technology UTF-8 encoding way, in the development of the site process, it is possible that the problem caused by encoding's Chinese query cannot achieve the situation. Under the premise of the unity of the encoding mode, the use of encodeURI () function can effectively solve the problem, to achieve the Chinese query. Key words:Chinese Query;Smarty;Ajax;PHP

随着电子商务的发展,越来越多的人们选择在网络平台上购物,而信息搜索是电商网站最基本、也是极其重要的一项功能,用户在网页上可以通过搜索快速找到自己感兴趣的商品,从而免去了逐个查找的不便,大大提高了购物速度,省却了时间和精力。

PHP是一种在服务器上运行的开发语言,是一种类似ASP的服务器端脚本语言[1],在TIOBE 编程语言排行榜上名列前茅,是一种网站开发的主流开发技术。在PHP众多开发模板中,Smarty模板一直处于领先地位,利用Smarty模板可以实现网页代码控制和页面美工分离开来,从而使得开发过程更加清晰明了,利于后期的修改和完善。Smarty运行速度极快;效率高;模板只需被解析一次,无需重复[2],正是由于Smarty模板的高效性以及合理的开发模式,使得Smarty模板在网站开发过程中成为开发人员的有力臂膀。

龙源期刊网 http://www.qikan.com.cn

在开发网站搜索功能时,Ajax技术可以实现在不刷新页面的情况下与数据库交互,这项技术极大地提高了网页和数据库之间的访问速度,Ajax技术具有以下优点:[3]

1)减轻了服务器的负担。因为 AJAX 技术是按需取数据,所以最大可能地减少了冗余请求和响应对服务器造成的负担。

2)无刷新更新页面,减少用户的等待时间。

在利用Ajax技术实现查询功能时需要特别注意编码问题,Ajax不支持多种字符集,默认的字符集是UTF-8,所以在使用Ajax技术时应该进行编码转换,否则程序中出现的中文字符将变成乱码,[4]从而影响中文查询的结果。 1 Ajax技术实现查询的过程

1.1 初始化XMLHttpRequest对象,建立createxmlhttp.js文件

XMLHttpRequest是一个具有应用程序接口的JavaScript对象,该对象通过HTTP连接服务器,利用XMLHttpRequest技术,Ajax可以像桌面应用程序一样只同服务器进行数据层面的交换,而不用每次都刷新页面,从而减轻了服务器的负担,又加快了查询的响应速度。考虑到XMLHttpRequest对象不是一个W3C,在实际应用中,不同的浏览器,有不同的初始化方法,因此,可以创建createxmlhttp.js文件,针对不同的浏览器初始化为不同的实例对象。 1.2通过open()方法以及XMLHttpRequest对象的常用属性完成异步查询请求 XMLHttpRequest对象提供了open()方法用于设置异步请求目标的URL,在利用xmlhttp.open(\,url,true)请求数据库响应的过程中,其中的参数url为请求目标的URL,往往为一个PHP文件,在提交请求的同时可以将查询关键字通过附加URL的方式一同提交给目标URL。XMLHttpRequest对象还提供了一系列的常用属性,可以通过ready State属性的值来判断请求的状态;response Text属性为服务器的响应,根据服务器返回值的不同可以给出不同的查询结果;onreadystatechange属性往往可以和匿名函数联合使用用于确保每个状态改变时都会触发这个事件处理器。

1.3编写请求目标PHP文件,实现Ajax查询

在调用open()方法进行异步请求的过程中设置了请求目标的url,该目标URL所对应的文件主要是进行数据查询,在查询过程中,文件首先将通过附加URL变量方式传递过来的查询关键字接收,通过编写SQL语句对数据库进行查询,并可将查询结果记录在Session变量中供后期显示在网页上,同时将查询状态返还给XMLHttpRequest对象。 2 Ajax技术在查询过程中出现的中文乱码问题

龙源期刊网 http://www.qikan.com.cn

Ajax技术并不支持多种字符集,默认支持的是UTF-8字符集,这也就意味着在发送数据的时候Ajax会使用UTF-8编码后发送,这时候如果页面使用的不是同样的编码,就会出现以下情形:明明数据库中有数据,但中文搜索却查询不到。假使在程序运行过程中利用跟踪技术就可以发现通过附加URL变量发送数据时,PHP接收到的是乱码,因此在使用select语句查询时where子句的条件配对成了问题。 3 中文查询乱码的解决方法 3.1编码方式的统一

在实际开发过程中,往往将客户端和服务器端都使用统一的编码,可以使用以下方法设置编码方式:

1) 在创建页面的过程中指定编码方式

2) 在页面顶部使用header()语句指定发送数据的编码方式 3.2使用encodeURI()函数编码

由于Ajax技术在发送数据的时候默认使用的是UTF-8字符集,所以当Ajax发送中文数据,PHP负责接收的时候就有可能由于编码的不同导致乱码的产生。这时候encodeURI()函数就起到了至关重要的作用。

encodeURI() 函数是一个Javascript函数,可把字符串作为 URI 进行编码。在实际使用中,可以使用该函数先对需要通过Ajax发送的数据进行编码,然后再发送出去,由PHP负责接收,这样一来就能解决由于编码不同导致接收乱码的问题。

如想在页面上实现通过搜索商品名称查询商品信息,可以使用以下JS代码解决问题。 var name=encodeURI(form.name.value);//获取文本框的值 var url=\?name=\;

xmlhttp.open(\,url,false);//不刷新验证是否存在该商品 xmlhttp.onreadystatechange=function() {

if(xmlhttp.readyState==4) {

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4