2009年七月 的博文

世博展示馆

仿ajax无刷新上传文件

  在做的一个基本全用ajax(什么是ajax)的项目,接近收工时碰到一个头痛的问题,上传文件无法用ajax实现。后来想了一下也确实是这样,ajax与后台通信全部是通过传递字符串的,怎么可能传递文件呢?再说出于安全考虑,js也是不能操作文件的,更不要说ajax上传文件了。

  经过网上搜索,学会了一中方法,实现“类似ajax”的无刷新上传文件。

  其实在ajax技术出现之前web应用就可以实现无刷新的,主要用iframe。当ajax出现,并由google带动起来后,大家都去使用ajax,iframe也无人问津了。但是可以去看一下gmail的文件上传,还是在用iframe。也就是说,要实现无刷新上传文件,iframe还是最佳的选择。

代码(只有关键部分,其它部分与正常文件上传类似):

html

  1. <form id="upform" enctype="multipart/form-data" action="upload.php" method="post" target="hidden_frame">
  2.   <input type="file" name="file" id="file" onchange="upload()" />
  3.   <input type="hidden" name="MAX_FILE_SIZE" value"10485760" />
  4.   <div id="upmsg"></div>
  5. </form>
  6. <iframe id="hidden_frame" name="hidden_frame" style="display:none"></iframe>

  当中比较关键的是form里的target=”hidden_frame”,和一个name=”hidden_frame”的隐藏的iframe。这样form上传的处理就会在隐藏的iframe中进行,大页面没有刷新。

js

  1. function upback(msg)
  2. {
  3. document.getElementById("file").value="";
  4. document.getElementById("file").outerHTML=document.getElementById("file").outerHTML;
  5. document.getElementById("upmsg").innerHTML=msg;
  6. }

  js函数的前两行就是用来清空上传框的,由于浏览器差异,清空的方法有点不同请注意一下。然后把后台的返回信息显示到预留的空间里。

php

  1. <?php
  2. echo <script type="text/javascript">parent.upback("文件上传成功")</script>;
  3. ?>

  后台上传文件的过程这里就不贴了,关键就是返回信息时,在iframe里输出js代码来控制它的父页面。

  最终这三部分合作就能完成“仿ajax”的无刷新上传文件了,你也试试吧。

《天谴2050》连载:八

继续连载本班同学黄祖稼同学的小说《天谴2050》,在这里查看该小说所有已发布部分。

本小说版权归作者黄祖稼所有,请予尊重。

  中尉跌跌撞撞地向前跑了几步,又跌倒了。他把经历的事情回忆了一下——他们接近了教堂,里面的一个牧师帮他开了门,然后是狼叫,他的人一个个倒了下去;他们开了枪,打死了一个类似狼,不,是类似人的东西,一个在神话传说里频繁出现的生物;他们开始跑,后面听到了惨叫;他突然停下来,一回头,看见了一个难以解释的现象——一束光从空中射下来,又分散成许多根小光束,然后是闪光弹一样的光扩散,令中尉遮住眼睛,他转头去继续跑了。

  他趴在一块石头上,喘息着。这个狼人,他想,还有几天前那个虫子,这些究竟是什么东西?

  罗伊的声音又打断了中尉的思考:“中尉,中尉!我总算找到你了!”

  中尉转过身子,喘息着说:“几个人……还活着?只有你?”

  “是的,……中尉”罗伊迟疑了一下说。

  中尉低了一下头,然后从地上站起来,走上前去,拍了拍罗伊的肩说:“我失职了。”

  罗伊站定在那里,中尉抬头,看见他的眼睛有些红,他就安慰说:“大兵,别难过了。”

  罗伊并不回答,他望向远处。中尉放下手,走开去,望向另一边:那是教堂的方向,但是能见度太低了。他感到恐惧,想到几天前,这里还有军队救援;而现在,虽然有两个人,但根本没有方向,没有生命的希望。C-9运输机空投的几乎全部士兵都阵亡了,除了他们两人生还。其实,这完全是一次错误的行动,他们的空投包括了小量物资,但是物资定位器却在现在已经失踪的李上士身上;而呼叫空中运输的仪器已经化成灰了。他们已经无法再回去了。

  “罗伊,”中尉说,“我们待着是没有用的,我们得四处走走。这里是……市中心。那么无论往哪个方向走,都能很快出城区。在郊外应该不会是这样的影像了。嗯……”

  “好的长官。”罗伊说。

  中尉看了他一眼:这个年轻人太可怜了,他遭受了如此恐怖的灾难,现在还要承受这么大的心理压力。这里罗伊什么也没说,就走了;中尉跟在他后面。中尉并没有发现自己落下了东西。

  无边的暗夜,无边的焦土,衬出了灾难的恐怖。但是在高高低低的瓦砾堆里,这两侥幸逃生的人在走着;罗伊拉着中尉翻上一个土堆,但他们看到的只是更多的土堆,更多的浓烟。

  为了解闷,罗伊跟中尉讲起笑话来。难以想像,中尉边笑边想,一个年经人经受那么大的心理创伤,居然还能保持一个美国人的幽默风趣。但他并没有分心,他接着听——不知不觉中,脚下已经踏过了大半个洛杉矶了。

  浓云中钻出了一架F-25A战机。战斗机调整了航向——突然飞行员看见雷达上数个光点。“敌机!”他说,摆正机头,他看到“敌机”的身影——那是几个扑愣着翅膀,拖着长长的尾巴的东西。飞行员疑惑地眯起眼看。这时他看见那些东西冲过来了,这才令他从联想中醒来,他拔开导弹发射钮的护盖。瞄准仪已经自动对准了其中一个东西。于是他摁下发射钮——一发导弹抢着一条白烟飞了出去;他满足地看着导弹自己飞过去,感到惬意。但是忽然,那个东西避开了;飞行员瞪大了眼睛——另一个东西冲过来了:那是,可能是一只大虫子,一种飞虫,浑身的骨甲,双眼死死盯住驾驶仓。飞行员皱起眉头。他按下另一个按钮,响起了机炮的声音。飞行员咬紧嘴唇,看着那只大虫子被M61A5的凶猛火力打成了筛子,绿色的浆液溅上了玻璃窗;飞行员抬头看它残破的身躯擦过支,然后在反光镜上看见那虫子又被尾翼直接切成三段……飞行员呸了一声,说:“真恶心!”

  这时他听到哐的一声,整架飞机开始颤抖起来;强气流?飞行员想,这飞机可承受不住长时间的强烈震动!他敏捷地一抬操纵杆,飞机向左翻转过去。这时他又听见了飞机机腹的响声。他疑惑地向下侧一看——看见一条摇动着的、长满尖刺的尾巴——他知道飞机已经被一个虫子缠上了。他紧张起来,手摸索着寻找弹跳按钮。

  飞机的一边机翼被一根刺刀扎穿了,燃料箱就在机翼上,顿时燃油像飘带一样被抛在飞机后。飞行员一看,骂了一句,手抓住弹射柄;突然一声巨响,右机翼被扯了下来!他吓得不知所措——此时飞机已经开始向右翻滚;另一只虫子也扑了上来。机舱里所有警示灯都在闪烁着。完了,那只虫子爬到了上面,也失去了逃生机会。飞行员眼睁睁看着那只虫子在上面爬行。

  飞机后面燃起了熊熊大火;飞机完全失控了,两只飞虫撕扯着又卸掉了战机的左翼,然后它们不约而同地扔掉残破的机身,把它扔进大火中——一阵剧烈的爆炸,一只虫子燃烧起来,痛苦地号叫着,划出一道长长的弧线坠落下去。天空中一片大火,到处是飘零的残片。

  云层中又钻出一个巨大的黑影,逐渐显露在光线下——那是美国的3F-O2“阿拉斯加”级“麦阿密”号空中堡垒。

  指挥室中,雷达兵跑过来说:“又损失一架飞机!遭遇不明生物。”

  一个舰长模样的人说:“战斗状态。”铃声响了,堡垒进入了战斗状态——能够听到数次齐唰唰的舱盖打开的声音。空中堡垒外面,一扇扇舱门打开了。

  天空远处突然聚焦起一团乌云;很快那团乌云就分散成无数小黑点,冲了过来——那是飞行觅食的虫群。刚才的那虫子见状,往空中堡垒;它接近的一刹那,顿时被机炮轰得脑浆四溅,在空中绽开了一朵绿色的花。

  “再多也没有用的,空中堡垒的防御力可以击毁一切有威胁的固体物。”舰长的副手露出一个轻蔑的笑容。

  外面,空中堡垒导弹齐射——无数光点从发射井里钻出,飞向虫群,留下几十道白烟。十几秒后,虫群中爆炸如雨,无数黑点从空中跌落下来。

  中尉停下脚步。“不对,这里就是刚才出发的地方。”绕了一圈,又回来了。他走过去,弯下腰,捡起一个弹匣;他下意识地一摸腰包,惊奇却又毫不意外地发现腰包的口开着,里面空了。他把弹匣塞进包里,看看跟在后面喘气的罗伊。他无可奈何地摇了摇头。

  突然他听到了一声响动。罗伊也听见了,他立刻端起枪来,警惕地看四周。“没什么,是只虫子而已”一个虫子——也许是蟑螂——爬了过去。

  “前面几个土堆有个人!”中尉听到。“什么?”他说,“罗伊,是你说的?”“什么是我说的?”罗伊一脸奇怪。不是他说的是谁说的?中尉想,不管怎么样,去看看再说。但他忍不住又说了句:“什么方向?”

  “那里!”这不是幻觉!中尉想。他看见那一只蟑螂用触角指向一个方向。他顿时信心十足。

  “您在跟谁说话,长官?”罗伊打断了中尉的思考。

  “哦,没什么。”他回答说,装出一脸无辜。

  中尉想起来刚才的信息,想再问些什么,蟑螂已经无影无踪了。于是他说:“罗伊,跟我往那儿走几个土堆,看看有什么。”罗伊点点头,就跑过去了。

  中尉跟了上去,过了几个土堆,他看见罗伊站在那里;越过罗伊的肩膀,可以看见一个浑身是血的人躺在瓦砾中;中尉一眼就认出了他——李上士。中尉招呼了一声,跑了过去,看到一副惨状——李上士躺在那儿,军衣上染满了血;他的胸口有一个MO主战坦克炮口那样口径的创伤,尽管周围的血都基本凝固了,但鲜血还是不断渗出。李的脸因为失血而变得惨白,鼻子翕动着,发出微弱的鼻息;他的一只手瘫在一边,另一只手捂在胸口下面一点——那只手已经被红色黑色的血覆盖了。李的步枪还挂在他的肩上,但带子上也染满了血。从李的身上还能有生命的活力——他的眼神还是有神的,好像乞求一样盯着中尉和罗伊看。

  中尉三两步奔上前去:“李上士!”李转过头来望着中尉。

  中尉心头一阵酸涩,但他强忍住,叫罗伊说:“罗伊,止血!”罗伊翻起包来,掏出了一卷绷带;他使劲一拉,手却停下了——那一卷绷带只剩一点点了。罗伊把他扯下来,卷成一团,过来把绷带团摁在李的胸口,很快那团止血带就被染红了。李上士痛苦地喘着粗气,但他呛了一下,又转为微弱的呼吸。

  中尉说:“李!怎么回事?你怎么……怎么在这里!”

  李上士艰难地要说什么,又放弃了,但他支撑了一下,脸部抽搐一下,断断续续地说:“中……尉,不……不,长……长官……我的……我的人……都……死了……我……逃到这……这里了……我……要求……处罚……呃”

  “别说这个了。你要活下去,李。”

  “我……呃……对了……这……这是那个……那个……”李上士支起那只放在一边的手,伸进口袋里,摸出了一个金属器具——中尉立即认出那是上士携带的补给定位仪——他又缓慢地举起那个东西,塞到中尉手里,说:“长……官,这……这是定位仪……快……快去找……找补给……吃饱……活……活……”

  中尉紧紧抓住定位仪。它的表面还有残余的体温,而且一丝血迹也没沾着,光亮如新。中尉感动得不知如何是好。却听李说:“快……快……快……”李又呛了一下,他的声音更微弱了:“长官……你……你要……把这个……”他又艰难地取出一个钱包,“寄给……寄……寄给我……家人……家人……”

  “止不住了!”罗伊焦急地说。

  中尉顿了一下,他撕下了条衣服,递给罗伊。罗伊把它摁在止血带上。这时李上士的目光黯淡了,他的头歪向一边,呼吸急促起来。中尉看着他,他又来了一股劲儿——不知哪儿来的力量,李又正起头,目光又变得有神,他用尽所有的力量说:“长官!……长……官!一定要给……他们!一定……!”他又呛了一下,嘴张开来,像还要补充什么,但他的头又一下子歪了过去,失去了呼吸。

  中尉呆滞地看着上士失去光泽的脸。黎明到来了,光亮逐渐布满了那张已经毫无生气的脸。令人惊奇的是,今天的清晨竟然不是阴天——乌云散去了,隐蔽在远处地平线之外的太阳抛出无数缕光芒,照亮了受伤的大地,照亮了洛杉矶一个一个的土堆,也照亮了中尉、罗伊和已经死去的李。在太阳光下,中尉贪婪地翻开那个钱包,妄图用太阳光线看清里面,可是他失败了,他的视线又模糊了——信封里,装的是一张有点旧的全家合影,还有一封给母亲的信,以及一些要寄回家的钱。

  周围依然很多雾,但空气已经清新多了。天空中还有几片残云,被曙光映红了,好像象征着新的希望,骄傲地在晨风中舞蹈。

未完待续

[转]这视频告诉你什么叫牛

牛得我没话说了。看视频吧 | 来自优酷网