Google

AJAX与PHP的完美结合(二)

Saturday, November 26, 2005
Ore : 8:44 AM

在开始编写Javascript前,我们先用PHP制作一个简单请求对象,它将接受XMLHTTP的GET数据,然后回复一段字串。

<?php


$name="";$email="";

if(isset($_GET['name']) && isset($_GET['email'])){
$name = $_GET['name'];
$email = $_GET['email'];
if(eregi("^[a-z0-9_]+@[a-z0-9_.]+$",$email) && $name){
echo "Thank you, ".$name." .Your email is ".$email;
}else{
echo "You're not complete the form or the format of Email is invalid.";
}
}
?>

以上的对象操作很简单,纯粹是显示用户的名字和电邮而以。如果用户没有输入,则会发出通告。

接下来就是利用Javascript的时候了。我们首先要做的就是先生成一个XMLHttpRequest物件,不过微软则是生成一个Msxml2的XMLHTTP的ActiveX物件;虽然两个浏览器的物件不同,不过其他的功能都大同小异,接下来的原码就没有什么不同了。

//先创建一个主函式,所有的起始工作都放在这里。
function loadXML(url){

/*一般上Netscape/FireFox会先检查浏览器的使用权限,如果你的程序不是在本地而是在别的网络空间运作的话,你需要给于浏览器一个Privilage,要不然会有Permission Denied的错误释出。
(我将这个当作comment,因为目前这个程序是在本地测试,不需要这一步骤)*/

/*if(window.netscape && netscape.security){
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
}*/

//检查浏览器种类,并生成适合该浏览器的XMLHTTP物件
if(navigator.appName == "Netscape"){
xmlhttp = new XMLHttpRequest();
}else if(navigator.appName == "Microsoft Internet Explorer"){
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}else{
return false;
}

/*name和email是两个textbox的值,也就是用户所呈交的数据。搜集了这两个数据之后,把它们和url
//连接在一起,并用GET的方法准备传送给处理对象。 */
if(document.getElementById){
var name = document.getElementById("txt_name").value;
var email = document.getElementById("txt_email").value;
url += "?name="+name+"&email="+email;
}

/*XMLHttpRequest在和服务器交换资料是会有4个阶段,我们可以通过readyState这个特性来
//得知交换资料是否成功。而每个readyState变换的时候都会有一个Event Handler来负责产生
//Event。以下我们将每一个event交给processdata来处理。processdata是一个处理服务器回复的
//方法。*/
try {
xmlhttp.onreadystatechange = processdata;

/*open是将指令传输到服务器的方法,一共有三个parameter,第一个是HTTP的GET指令;第二个是请求对象
//的位址;第三个是同步和非同步的选项,true为非同步。
//send是将请求资料送出的方法,在这个例子里我们已经用GET的方式将资料放入url文档里,所以在这里
//只需呼叫send就可以了。(注:Netscape需要加入一个null的parameter).*/

xmlhttp.open("GET",url,true);
(navigator.appName == "Netscape")? xmlhttp.send(null):xmlhttp.send();
}catch(e){
return false;
}
return true;
}

以下是processdata方法的源码,正如之前所说的,当readyState为4的时候,就代表资料已经准备好了,这时候的状态(status)为200。当readyState为0-3的时候我们可以显示一个Loading字眼,待料资料还在准备中,这个在大部分的AJAX界面都可以看到。资料准备就绪时,我们可以透过responseText来提取纯文档资料,或responseXML来提取XML格式的资料(只限XML文件)。

function processdata(){
/*if(window.netscape && netscape.security){
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
}*/

var para1 = document.getElementById("para1");
(para1.hasChildNodes())?para1.removeChild(para1.firstChild):{};

if(xmlhttp.readyState == 4){
if(xmlhttp.status == 200){
var result = xmlhttp.responseText;
var newResult = document.createTextNode(result);
para1.appendChild(newResult);
}
}else{
var newTxt = document.createTextNode("Loading...");
para1.appendChild(newTxt);
}
}

appendChild和createTextNode等为DOM的函式,之前在我的博客里曾经讨论过,所以我这里不多做介绍。XMLHttpRequest的用法并不复杂,可以说是很简单;不过,最重要的还是处理XML文件的能力,因为在真正运用时,XML还是传输资料的首选,而且伸缩性也相当大。比较起来,纯文档只能用来显示一些简单的句子,不能够用来表示有结构性的数据组。

由于XMLHttpRequest对第三网域(用户与服务器之外的网域)是有一个限制的。就好像用户不能从www.google.com透过XMLHttpRequest向www.microsoft.com发出请求,否则open方法将会释出Permission Denied的错误,这个对很多人来说都是一个困扰。下一个部分,我将解释如何考工具突破这个限制,让XMLHttpRequest能够发挥其真正的潜力。

这个是以上例子的展示 http://kfchai.6te.net/ajax

待续....

posted by *+_NiX_+* at 8:44 AM | Permalink | 0 commenti

AJAX与PHP的完美结合(一)

Friday, November 25, 2005
Ore : 10:23 AM

AJAX(Asynchronous Javascript and XML)这个最近因为Google而火红的名词已经在网络界备受关注。据我所知,Microsoft的最新网络服务网站www.live.com也采用了AJAX的技术。何以AJAX让那么多网站为它神魂颠倒呢?到底有什么过人的魅力?答案是 --- 无刷新浏览。

当我们在浏览一个网页的时候,会发现到在呈交请求(request)到服务器的时候,页面会刷新好让服务器能够将回复显示在网页上。这个是一个定律,一般上浏览器在发出POST或GET的请求后都会等到下载一个网页的指令,因此页面也会刷新。AJAX的做法则是颠覆这个传统,不用浏览器呈交请求而改用一个XMLHttpRequest的物件完成所有的工作,包括发出请求,处理服务器回复,最令人兴奋的是,还可以处理服务器回复的XML文件!XML可以说是一个小型的数据库,而且处理起来远远比纯文档来得方便得多;XMLHttpRequest是在幕后悄悄把请求送出去和处理回复,过程中也不必刷新浏览器。如果想一睹AJAX的效果可以到Blogger主页,那个一直在轮播的Blog名字就是AJAX的效果,名单会在一定的时间内更新,所以即使你把Blogger的主页开上整天,你还是可以看到最新的名单!

是时候深入了解AJAX了,顾名思义,Javascript将扮演着非常重要的角色,当然Javascript只是一个client-side脚本语言的代表,同样的你也可以使用VBScript之类的脚本语言。不过,我接下来将用JavaScript作为主要的脚本语言。在AJAX里,Javascript主要是通过DOM(Document Object Model)来操控所有的文本元素,包括HTML和XML,DOM是W3C的浏览器物件模式的标准,目前大部分的浏览器都支持,包括:IE6,FireFox,Netscape,Opera等。如果你对DOM一窍不通,我建议你先去了解它的运作,再来学习如何运用XMLHttpRequest.

除了XMLHttpRequest之外,你还需要有一个处理请求的对象,通常是网页服务器文件或XML文件。我在接下来的例子中将运用到PHP服务器脚本语言文件,它将扮演处理请求和传回回复的角色。如果你了解这些运作,你会发现到其实AJAX不外乎是普通的HTTP send/receive罢了,唯一的不同点就是所有的运作都在用户界面背后进行。

完成一个AJAX程序,有以下几个步骤:

1.生成一个XMLHttpRequest物件(IE则生成一个XMLHTTP的ActiveX物件)。
2.利用XMLHttpRequest物件向服务器发出请求。
3.搜集回复资料(资料可以以纯文档或XML的格式存在)。
4.显示回复结果。

步骤2和3是最关键的两个步骤,也就是send和receive。

待续....

posted by *+_NiX_+* at 10:23 AM | Permalink | 0 commenti

刚刚在首页作了几个变动

Thursday, November 24, 2005
Ore : 12:23 PM

我总觉得Apply Microsoft的CSS Filter之后太耗费系统资源了,所以把它删除。现在看起来好多了。
Nix Gallery加入了三个功能,Play/Pause, next 和 Previous, 改了整两个小时几乎把所有的Code都翻新,累死我了;不过,对Javascript DOM的运作更了解了。
SideBar的每一个header加入了comment功能,把滑鼠移到header就会出来了,这个是昨天下午午餐时弄的。原本想让comment跟着滑鼠移动,不过Y-index不懂为什么总是会跳走。。。纳闷中。。。。:(

posted by *+_NiX_+* at 12:23 PM | Permalink | 0 commenti

利用Javascript HTML DOM来延迟网页物件下载

Tuesday, November 22, 2005
Ore : 9:01 AM

通常玩部落格最头痛的就是开一个网页要下载大量的物件,如果一个部落格含有大量的图片,音乐和Flash动画,那么无论是对宽频或窄频的用户都是一种困扰。为了不让下载网页体型过大,一般的方法是将embedded的player的Autostart特性设为零,或将Flash动画用Preloader的技术将下载延迟。不过这些方法还是得让用户下载大量的数据后才能够实现。这里介绍一个运用Javascript HTML DOM(Document Object Model)的方法来解决这个问题。DOM是W3C在1998年定下的一个浏览器物件标准,其涵盖的控制范围包括HTML,XML,CSS等等,目的主要是解决之前浏览器之间的兼容问题和开发新一代的浏览器物件模式。我们这里利用DOM的原因是它比较容易操作,而且能够在大部分的浏览器里面运作(注:IE5或Netscape6以下的浏览器不支持DOM)。

在我部落格首页右边的Nix Gallery就是利用这种方法来延迟图片下载的一个例子,当你按下Open的按钮之后,照片才会开始下载而无需刷新浏览器。如何开始呢?别紧张,首先在你的HTML文件里创建一个DIV容器,然后再给他一个ID,你稍后会利用到这个容器来下载你要的内容。



接下来就把工作全部交给Javascript了,以下列出一些在稍后会用到的DOM函式,以便作参考:


document.getElementById("myElement"); //提取文件内ID为"myElement"的物件
document.createElement("H2"); //生成一个新的H2 HTML物件;
document.createTextNode("text"); //生成一个字串结;
element.appendChild(newElement); //将新物件插入现有物件内
element.hasChildNode(); //检查该物件是否已有子物件



由于DIV本身目前并无具备任何内容,当用户开始要求下载,Javascript才开始将内容植入DIV内。将以下的源码拷贝到你的网页 script 标签里。

function displayImg(divId){

if(document.getElementById){ //test if browser is DOM supported
var dContainer = document.getElementById(divId);
}else{
return false;
}

if(dContainer.hasChildNodes()){ //test if container already loaded
return true;
}

var newImg = document.createElement("IMG"); //create new HTML img tag
var newText = document.createTextNode("Picture: Testing Only"); //create another textnode as description

newImg.src = "http://example.com/img01.jpg";
newImg.alt = "This is a test image";

dContainer.appendChild(newImg);
dContainer.appendChild(newText);

return true;
}


然后在DIV的上面加入一个Button,以便呼叫以上的Javascript函式。



如果一切无误,在你按下open Img之后,图片将会在div的位置出现。

在以上的例子里,你应该可以了解到如果你有大量的内容要延迟下载的话,这个将会是一个很好的解决方案。DOM除了可以加入HTML元件外,也可以加入CSS特性,例如: img.style.color=#fff ;而且也可以在XML,XHTML文件内通用,这个在最近被大部分大型网站采用的技术AJAX里也可以看到。

有关于更多DOM的教学,可以参考这里

http://www.w3schools.com/dom/default.asp

DOM的主页

http://www.w3.org/DOM/

posted by *+_NiX_+* at 9:01 AM | Permalink | 0 commenti

终于买了O2 XDA II Mini

Monday, November 21, 2005
Ore : 9:46 AM


昨天算是大出血了,不过把让那个打一封简讯需要5分钟的古董电话退休未尝不是一件好事。
原本看中了Motorola AX1000的3G功能,不过相比较之下虽然O2 mini不支持3G,不过功能伸缩性比较大,因为是采用阿标叔的Windows Mobile 2003 Pocket PC,而且O2实在是太可爱了,因此就将它买下来。

在这之前,又考虑过要买Xda IIs的,不过相比较之下,我还是选择了体积较小的Mini,因为如果是前者的话,我宁愿考虑买手提电脑,才差那么3~4百块。


posted by *+_NiX_+* at 9:46 AM | Permalink | 0 commenti

刚刚开了一个Bicycle Deck

Friday, November 18, 2005
Ore : 7:52 PM

这是我最后一个存货了,上一个蓝牌用了最久了,大概有4个月,哈哈。用了4个月的牌大概只剩下40多张,不过整副牌还比新的还厚。

开封了
来开个扇
绝招:TudorCut!

posted by *+_NiX_+* at 7:52 PM | Permalink | 0 commenti

Linux之父转变作风 严格要求核心码开发人员


Ore : 1:22 PM

11月12日,Linux之父李纳斯?托沃兹(Linus Torvalds)是Linux操作系统的创造者并一直控制着Linux操作系统的开发核心。他日前向某些开发商提出强烈抗议,指责他们最后更改了开发的核心内容。

  Linux操作系统的核心开发团队最近制定了一项政策,规定在前一版本的Linux发布之后的两周时间内开发出来的最新的功能应该添加到下一版本的Linux系统核心之中。

  但是目前负责开发Linux核心对SCSI接口的支持代码的James Bottomley在星期三说,他认为在两周的时间内很难保证可以将新功能合并到下一版Linux系统之中,因为研究人员们并没有对新的程序补码是否能够与系统其他部分兼容工作进行测试,而是将这部分工作留给他来完成。

  Bottomley在致Linux系统核心开发成员的公告中写道:“那个想法不错,但是将程序补码提供给我的开发人员却没有提前通知我就把程序补码丢在我这了,而你刚刚宣布更新系统核心内容,结果也不管还有没有时间就把集成测试工作都压在了我一个人身上。”

  托沃兹回复Bottomley说他应该对开发人员要求严格一些。

  他在电子邮件中说:“你告诉他们停下工作并且停止接收他们发来的程序补码,这样就是他们自己的编码被延迟了,而不是你的编码被延迟了。”

  托沃兹补充说他将严厉对待那些给Linux系统核心添加东西太晚的人。

  托沃兹说:“别人总是说我太软弱了,这次我不会再软弱了。”

  他说:“如果有人错过了核心升级的时间或者在最后一刻还在匆匆忙忙地瞎胡闹,我就会拒绝接受他开发出来的代码,并对他们的哀求毫不留情地报以嘲笑。并告诉他们,很快下一次的核心升级时间就会到了。”

  最新发布的Linux系统核心是2.6.14版核心,由于临时提交的代码出错影响到新核心的发布时间整整晚了一个月.


图:Linux之父 Linus Torvalds


Nix: 不久前才将我的FC3的核心升级到2.6.12,没想到2.6.14这么快就出了。我觉得Linux和所有的Distro都应该注意一下核心“体型“逐渐提升的趋势,虽然这是必然的,不过我觉得整理一下核心的发布方法是必要的。

posted by *+_NiX_+* at 1:22 PM | Permalink | 0 commenti

SONY急召回500万张CD 内藏软件或致病毒袭击


Ore : 1:12 PM

世界最大的音乐制品公司之一索尼BMG公司16日宣布,该公司正在召回数百万张包含“XCP”版权保护软件的音乐CD,原因是专家认为这种软件可能使购买者个人电脑受到病毒或黑客袭击。

  索尼BMG公司16日在网站上发表致用户信表示,该公司目前正在召回含“XCP”软件的CD,今后也将停止使用“XCP”软件。购买者可用这种CD交换该公司的类似产品。

  据法新社报道称,当用户在个人电脑上播放索尼BMG公司发行的这些音乐CD时,CD中所包含的“XCP”软件会改变电脑的程序设置,电脑因而有遭受多种恶意软件程序攻击的危险。

  索尼BMG公司同时宣布,将向防病毒公司提供技术资料,以帮助修复受影响的电脑。但索尼BMG公司同时解释说,含这种软件的CD只会影响电脑,不会影响CD播放机和DVD播放机。

  另据《纽约时报》报道,索尼BMG公司已发行了约500万张这种含“XCP”软件的CD,其中约200万张已经售出。

Nix: 没想到反盗版差一点就把自己的招牌给砸了。曾经买过类似这样次的CD,忘了是谁的专辑了,防拷贝,防这个防那个,结果要听一个CD都麻烦到要命。所以,希望唱片商能够注意这一类系统的品质,功能多不多不要紧,最重要是安全和方便就可以了。

posted by *+_NiX_+* at 1:12 PM | Permalink | 0 commenti

Sun发布并支持PostgreSQL开放源代码数据库


Ore : 12:44 PM

【eNet硅谷动力消息】Sun微系统公司于当地时间本周四宣布,它计划发布并支持PostgreSQL这一开放源代码数据库,为PostgreSQL提供大力支持。

  据Sun这一服务器和软件公司表示,它将开始向在其Solaris操作系统上运行PostgreSQL数据库的企业客户提供支持服务。据Sun公司的官员在一次记者招待会上表示,Sun公司的工程师将参与这一PostreSQL开放源代码项目,针对Solaris操作系统对PostreSQL进行整合,并增强其高端性能。据Sun公司软件业务部门的执行副总裁约翰表示,Sun公司将努力将PostreSQL与它的操作系统和其管理系统进行整合。据约翰表示,我们打算将PostreSQL这一数据库与我们的Solaris操作系统紧密结合起来并向它提供大力支持。Sun公司计划在下个月提供与数据库相关的服务。

  除了以上报道的之外,Sun公司还表示,它正在将其Solaris ZFS的128位文件系统发布到OpenSolaris开放源代码项目中。这一软件将于下个月向开发人员提供,并于明年的上半年完全整合到Solaris操作系统的第一个升级包中。另外,Sun公司还打算将Xen虚拟性软件增添到OpenSolaris中,其升级版可能会于明年亮相。Sun公司也表示,它打算到今年年底增添一项被称作Solaris Containers的功能到OpenSolaris中,这项功能能够使RedHat Linux应用软件在OpenSolaris上运行。

  Sun公司支持PostreSQL数据库的决定对几个月以来对它的传言进行了终结。在今年早些时候,Sun公司的高层官员宣布了支持一种开放源代码数据库的计划,但是对哪一种产品则没有指明。

Sun Microsystem
PostgreSQL

posted by *+_NiX_+* at 12:44 PM | Permalink | 0 commenti

Google股价首突400美元 市值1120亿超思科


Ore : 12:36 PM

本周四Google的股价首度突破400美元大关,当日,Google股价在纳斯达克上涨5.30美元,报收于403.35美元,涨幅为1.33%。按照这一股价计算,Google的市值达到1120亿美元,甚至超过了思科。在第一次互联网大潮中,思科曾经是全球市值最高的公司。在技术类公司中,Google的市值现在仅次于微软、英特尔和IBM公司。Google的市值也超过了可口可乐公司。

  自发布第三季度财报以来,Google股价上涨了大约100美元。由于第三季度业绩大幅度增长,分析师对Google公司2006年每股收益的平均预期提高了1.12美元,达到8.44美元。尽管股价已经达到400美元的高位,仍有很多分析师预测Google股价还有进一步上涨的空间。在34位跟踪Google股票的分析师中,有25位推荐投资者购买,另有8位建议投资者持有。

posted by *+_NiX_+* at 12:36 PM | Permalink | 0 commenti

又是一个周末了


Ore : 9:37 AM

星期五,让人又爱又恨的一天。。。。爱它周末就快到了。。。恨他就差那么一天。昨天二叔表姐她们从泰国旅游回来了,我不曾到过泰国,听他们说起他们的旅程就很羡慕。。。旅游多么好啊,要是以后能够周游列国度日的话,该有多好啊!(别做梦了!,赶快工作!)




我要去度假!!!



posted by *+_NiX_+* at 9:37 AM | Permalink | 0 commenti

部落克终于有点象样了

Thursday, November 17, 2005
Ore : 8:14 PM

今天费了半天来弄我的部落克,还不错,加了几个小东西。Logo也临时抱佛脚随便弄弄的,还可以看;
可惜Blogspot好像不支持PHP,看来要用其他的办法才能弄一些动态的资讯。今天写了一个PHP新闻发布,没想到不能用,、气死人了!

posted by *+_NiX_+* at 8:14 PM | Permalink | 0 commenti

来介绍一下


Ore : 9:28 AM

Nix的内容备忘录

  • 由于这是网上日记,当然会有小弟的生活点滴和记事在里面啦。当然也少不了照片,音乐等的分享。

  • 小弟目前在自学PHP,略有小成,所以会在这里整理出一些PHP的教学。也会包括HTML,XML,CSS的内容。

  • 另外,由于工作的关系,整天都和电脑打交道,所以内容可能会比较多关于电脑的东西。Linux, Windows,科技新闻等等都是小弟的兴趣,所以讨厌电脑的朋友可能这个不适合你罗;电脑GURU就麻烦你们指点指点了!




posted by *+_NiX_+* at 9:28 AM | Permalink | 0 commenti
About me
Name:
Location: 古晋, Malaysia
Feed Back
Message Box
Del.icio.us Tags
Credits

Powered by Blogger

Get the latest update of my blog!

¿Æ¼¼ÐÂÎŹ㲥Íø

Top