标签存档: Ajax

[AJAX] ASP中使用GB2312编码时处理乱码问题

在AJAX开发中,编码问题往往是令开发者比较头痛的,特别是在编码不是UTF-8的情况下。虽然这篇文章是讲的怎么处理乱码问题的,但是我还是推荐在做AJAX开发的时候使用UTF-8编码,这样可以避免很多问题。

AJAX中,XMLHttpRequest发送数据和接收数据的时候往往都是使用UTF-8来处理数据的,也就是说,虽然程序是使用GB2312作为编码的,但是XMLHttpRequest还是以UTF-8来处理,这样就导致乱码问题了。

所以如果要解决乱码问题,可以通过指定文件编码来解决。指定文件编码后,XMLHttpRequest就会使用指定的编码来处理文件,这样,碰到GB2312编码的文件时,XMLHttpRequest还是能以GB2312编码来读取文件,这样就能避免乱码了。

要设置编码方式,可以发送ContentType头来指定。

在ASP里,要设置ContentType,可以用以下语句:

  • Response.ContentType = "text/html; charset=gb2312"

在ContentType里,charset就指定了文件编码。

一般在AJAX客户端需要处理和显示中文数据时候,最好在服务端设置文件编码,即设置ContentType。如果服务端不知道是否会返回中文数据,那么还是设置一下编码的好。

这样处理AJAX中乱码的方法并不局限于ASP,比如在PHP里也可以使用header函数来设置ContentType。其实理论上只要能在服务端设置HTTP请求的header,就能通过这样的方式来解决乱码问题。

就这样。

AJAX应用之草稿自动保存

相信用过Gmail的人都知道Gmail有一个草稿自动保存的功能,每过一段时间,Gmail都会自动保存邮件草稿,这样在一些突发情况下就能快速地恢复工作,免得写了半天的邮件眨眼之间就没有了。在学了AJAX之后,我也给自己的blog加上了这个功能。当然,这个应用并不只限于blog上,应该说还是比较通用的。

PS.为了开发的方便,我用了一个自己写的AJAX类,具体内容和下载在这里

演示地址

仍旧以代码加注释的方式来说明怎么编写。

首先是表单填写页面,用一个ID为AutoSaveMsg的DIV来显示返回信息,并且用一个ID为Draft_AutoSave的CheckBox来确定是否进行自动保存,然后将Textarea的ID命名为message。同时为了应对多用户同时使用的需要,加上用户名,每个用户的草稿分开保存。为了说明方便,我把一些修饰性的东西去掉,这样看起来比较明了:

  • AJAX应用之草稿自动保存<br />
  • <!-- 用户名默认为NONAME -->
  • 用户名:<input type="text" name="memName" id="memName" size="20" value="NONAME" />&nbsp;&nbsp;&nbsp;&nbsp;
  • <!-- 在自动保存选项的onclick事件中调用自动保存状态设置函数 -->
  • <input onclick="SetAutoSave();" type="checkbox" id="Draft_AutoSave" value="1" checked="true"  />自动保存?<br />
  • 内容:
  • <textarea id="message"></textarea><br />
  • <!-- AutoSaveMsg显示返回信息 -->
  • <div id="AutoSaveMsg"></div>
  • <input type="submit" value="提交内容" />&nbsp;&nbsp;
  • <!-- 调用函数恢复最后保存的草稿 -->


阅读全文 »

一个简单的AJAX请求类

给blog加上无刷新搜索和即时验证检测后,又看了下代码,感觉太过麻烦,就把XMLHttpRequest请求封装到一个类里面,用起来方便多了,不用记那么多代码,什么创建XMLHttpRequest对象什么的,这部分代码也是重用性比较高的~已经打包,在日志的末尾下载。

要看效果的话点开侧边栏里的日志搜索,里面有一个无刷新搜索,就是了,或者在阅读日志或留言簿里的注册码那里有即时检测,如果不输入验证码或者输错了验证码,输入框都会变红的^_^

类名:AJAXRequest

创建方法:var ajaxobj=new AJAXRequest;,如果创建失败则返回false

属性:method  -  请求方法,字符串,POST或者GET,默认为POST

url         -  请求URL,字符串,默认为空

async     -  是否异步,true为异步,false为同步,默认为true

content -  请求的内容,如果请求方法为POST需要设定此属性,默认为空

callback  - 回调函数,即返回响应内容时调用的函数,默认为直接返回,回调函数有一个参数为XMLHttpRequest对象,即定义回调函数时要这样:function mycallback(xmlobj)

方法:send     -  发送请求,无参数

一个例子:

  • <script type="text/javascript" src="ajaxrequest.js"></script>
  • <script type="text/javascript">
  • var ajaxobj=new AJAXRequest;    // 创建AJAX对象
  • ajaxobj.method="GET";   // 设置请求方式为GET
  • ajaxobj.url="default.asp"  // URL为default.asp
  • // 设置回调函数,输出响应内容


阅读全文 »

AJAX初体验之实战篇——打造博客无刷新搜索

如果你对AJAX不是很了解,可以先看看这篇教程的前篇《AJAX初体验之上手篇》

现在博客很流行,相信应该上网时间稍微长点的朋友都会在这或者在那的有一个自己的博客。对于一些有一定能力的朋友,可能更喜欢自己去下载一个博客程序来架设一个自己的博客,而不是使用一些博客网站提供的服务。而大部分博客程序所带的搜索功能是提交查询关键字到搜索页面,然后在后台生成搜索结果,再呈现给用户,这过程之中浪费了一些带宽,如博客的侧边栏。要节约这一些带宽,我们可以用AJAX来打造自己的无刷新日志搜索。

在本篇教程中,数据库的表名和日志查看页面以L-Blog为例,因为我的博客程序是从L-Blog修改而来^_^。

本教程中的例子已经通过实际测试,可以直接在L-BlogFBS中使用。当然,要真正应用的话还是需要做一些美化及完善的。

在数据库中日志内容数据表名为blog_Content,其中日志ID为log_ID,日志标题为log_Title,日志查看页面为blogview.asp,参数为日志logID。有了这些资料,就可以开始创建搜索结果的XML文档模板了。在显示搜索结果时,需要显示日志的标题,以及日志的ID来创建到查看日志的链接。

搜索结果模板sample.xml

  • <?xml version="1.0" encoding="utf-8"?>
  • <blogsearch>
  •     <!-- 每一个reslut就是一个搜索结果 -->
  •     <result>
  •         <!-- 日志的ID -->
  •         <logid>1</logid>
  •         <!-- 日志的标题 -->
  •         <logtitle>AJAX初体验之上手篇</logtitle>
  •     </result>
  • </blogsearch>

每个result就是一个搜索结果,为了处理没有找到相关内容的情况,我定义了当搜索结果为空时logid为#。

在完成XML文档模板之后,就可以用ASP来动态生成搜索结果需要的XML文档了。搜索的关键字采用POST方式来传递。

搜索结果输出ajaxsearch.asp

  • <!-- #include file="commond.asp" -->
  • <!-- #include file="include/function.asp" -->
  • <%
  • ' commond.asp为数据库连接文件
  • ' function.asp中有要用到的函数CheckStr
  • Dim Search_Word,XML_Result,rsSearch,sqlSearch
  • Set rsSearch=Server.CreateObject("ADODB.RecordSet")
  • ' 获取搜索关键字
  • Search_Word=CheckStr(Trim(Request.Form("searchword")))
  • ' XML文档头
  • XML_Result="<?xml version=""1.0"" encoding=""utf-8""?><blogsearch>"
  • IF Search_Word<>Empty Then
  •     ' 创建查询SQL语句
  •     sqlSearch="SELECT log_ID,log_Title,log_Content FROM blog_Content WHERE log_Title"_
  • &" LIKE '%"&Search_Word&"%' AND log_IsShow=True ORDER BY log_ID DESC"
  •     ' 打开记录集
  •     rsSearch.open sqlSearch,Conn,1,1


阅读全文 »

AJAX初体验之上手篇

AJAX是这两年蛮热的东西,我也凑凑热闹,前些天去找了些教程学学,下面就按整个处理过程把自己学的东西写写,不过,因为是初学,所以有错误就请见谅啦,也欢迎指正,vipxjw#163.com。

PS.写完了之后看了下,结果再次验证自己写教程真是乱得可以,东说一块西说一块,条理不太清楚的说:)。

1.创建 XMLHttpRequest 对象

现在的浏览器有很多种,创建 XMLHttpRequest 的方法也不相同,所以为了兼容各种浏览器,在创建 XMLHttpRequest 时也应该考虑到各种浏览器的情况。目前主流的浏览器在Windows下有IE、Firefox及Opera,所以我们写的代码要尽量兼容这几个浏览器。在参考了一些资料后,我用下面的方法来创建 XMLHttpRequest 对象:

// 先定义一个变量,并赋初值为 false,方便后面判断对象是否创建成功
var xmlObj = false;
// 使用 try 来捕获创建失败,再换个方法来创建
try {
// 在 Mozilla 中使用这种方式来创建 XMLHttpRequest 对象
xmlObj=new XMLHttpRequest;
}
catch(e) {
try {
// 如果不成功,那么尝试在较新 IE 里的方式
xmlObj=new ActiveXObject("MSXML2.XMLHTTP");
}
catch(e2) {
try {
//


阅读全文 »