Ajax入门(python webapp服务端)

Thursday, May 21 17:46, 2009
0 comments/620 hits
Ajax用了才知道这玩意好,可以在后台偷偷的干一些坏事,哈哈,适合我的风格。

Ajax其实就是Asychronous JavaScript and XML,不过和XML的关系不太大,因为XML这种语言因为通用所以臃肿。不太适合小型应用。说的通俗点,就是使用一种叫做XMLHttpRequest的浏览器对象,偷偷的在后台访问服务器,得到服务器反馈后,就可以更新当前页面的局部数据,或者不更新(就是干坏事的时候)。

这种XMLHttpRequest对象实际上就像一个mini的浏览器对象,打开一个网址,然后发送'GET'或者'POST'请求,附带上一些数据,注意:对于'POST'请求一定要使用:

setRequestHeader("Content-length", len(yourdate));

来设置'POST‘请求发送的数据长度,如果没有数据,则直接设为0,这在发送某些命令时会使用到。

XMLHttpRequest的创建方法有很多种,其中的种类多样性显然是源自于IE浏览器的种类繁多和彼此不兼容。各种浏览器有各自不同的XMLHttpRequest,我也懒得自己研究,在wiki上找了一个创建方法,就直接使用了:
ajaxObject = function() {
try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e){
try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e){
try { return new XMLHttpRequest(); } catch(e){
throw new Error( "This browser does not support XMLHttpRequest." );
}}}}
var ajax = new ajaxObject();
接下来就可以使用创建好的XMLHttpRequest对象ajax来完成我们的ajax任务了。
ajax.onreadystatechange = function(){
if(ajax.readyState < 4){$(action).innerHTML="building";}
if(ajax.readyState == 4&& ajax.status == 200){
$(action).innerHTML=ajax.responseText;}}
pwurl = "/rpc?action="+action;
try{ajax.open("POST",pwurl,true);} catch(e){alert(e);}
ajax.setRequestHeader("Content-length", 0);
ajax.send(null);
上述javascript实现的功能就是往wpurl网站的rpc接口发送名称为action的操作,其中发送的数据为空,在请求未返回是,原始页面id为action的元素显示“loading”,当操作完成后显示返回的结果。该例采用了'POST'方法,只用了8行javascript代码就可以完成一个ajax实现,是不是好简单啊。哈哈:) 如果是采用'GET'方法的话,第7行都可以省略了,并且把第6行改成如下语句就行了。

try{ajax.open("GET",pwurl,true);} catch(e){alert(e);}

看来Ajax这种东西的面纱一揭下来也没什么神秘的。就是打开一个网址,发送点数据,然后等待结果,并且反馈给页面而已。
Author: gzguoer Categories: mindcyclone Tags: AjaxXMLHttpRequestPythonwebapp

这几天的blog进展

Thursday, May 21 16:52, 2009
1 comments/588 hits
这几天比较忙,同时所做的事情难度也越来越大,每天都要学习新的东西,所以进度很慢。
这几天完成的进度为:
  1. 完成评论的数据库创建,记录评论的作者,内容,作者的邮箱(用于gravatar显示头像)和作者的网址(用来显示在品论列表里)等;
  2. 在每篇文章末尾显示评论和添加评论的表单(UI部分参考的iNove),对于登陆用户会自动填写评论栏的用户名和邮箱(当然是gmail了。。。);
  3. 在侧边栏显示最新的评论,最多8条;
  4. 给每条评论增加了AJAX请求具体评论的功能;用了AJAX才知道AJAX技术真是简单又实用,真的很强大;
  5. 修改admin页面,使得现在可以查看/管理memcache,categories,tags等信息
  6. 给页面的绝大部分连接添加nofollow属性,发现google.com搜索我的页面还算比较勤快的,虽然google.com不懂中文。。。
  7. 支持gravatar头像显示;
  8. 侧边栏的评论现实时,去掉html标签,并且显示字数为50个
  9. 增加tags功能,现在侧边栏的tags是真的了:)
接下来还要做的事情:
  1. rich text editor的进一步改进;
  2. 增加achieve功能,和categories的效率改进(虽然很简单,但是懒的写了。。)
  3. 整体页面的memcache的重新设计,改进某些装在速度,可能使用AJAX装在侧边栏。
Author: gzguoer Categories: mindcyclone Tags: BBBlogPythonAJAX