ax

阅读 / 问答 / 标签

imax3d眼镜与3d眼镜有什么区别吗?

imax眼镜和普通3d眼镜有区别。1、原理不同:imax3d眼镜放映时采用偏振光式放映。普通3d眼镜是对色彩进行红色和蓝色的过滤。2、特点不同:imax3d眼镜通过偏振过滤眼镜或红外同步系统配合电子眼镜以提供两个单独的图像。普通3d眼镜通过3D眼镜与显示器同步的信号来实现。 imax眼镜和普通3d眼镜有区别,区别如下: 1、原理不同:imax3d眼镜放映时采用偏振光式放映,观看时以配戴偏光眼镜来分析立体图像。普通3d眼镜用肉眼观看的话会呈现模糊的重影图像,只有通过对应的红蓝等立体眼镜才可以看到立体效果,就是对色彩进行红色和蓝色的过滤,红色的影像通过红色镜片,蓝色通过蓝色镜片,两只眼睛看到的不同影像在大脑中重叠呈现出3D立体效果。 2、特点不同:imax3d眼镜圆偏振眼睛受眼镜旋转角度影响较小,当观众歪头时基本不影响效果,而不像线偏振眼镜在观众歪头时会出现立体画面的虚影。通过偏振过滤眼镜或红外同步系统配合电子眼镜以提供两个单独的图像。结合IMAX巨幕,IMAX3D能够产生逼真的全视野立体效果。普通3d眼镜通过3D眼镜与显示器同步的信号来实现。当显示器输出左眼图像时,左眼镜片为透光状态,而右眼为不透光状态,而在显示器输出右眼图像时,右眼镜片透光而左眼不透光,这样两只眼镜就看到了不同的游戏画面,达到欺骗眼睛的目的。

IMAX的3D眼镜和一般的3D眼镜有什么区别?

要观看IMAX立体电影,每个观众都必须佩戴轻巧、舒适的特制IMAX立体偏光眼镜。镜片经过精确的校准,与IMAX 立体放映机镜头的偏光度保持一致,使图像在对应的眼睛中成像——左眼图像在左眼中成像,右眼图像在右眼中成像。最后,您的大脑把这些图像融合到一起,使您看到令人惊叹的全彩立体影像。

imax电影院的3d眼镜是怎么用的?

imax眼镜和普通3d眼镜有区别。1、原理不同:imax3d眼镜放映时采用偏振光式放映。普通3d眼镜是对色彩进行红色和蓝色的过滤。2、特点不同:imax3d眼镜通过偏振过滤眼镜或红外同步系统配合电子眼镜以提供两个单独的图像。普通3d眼镜通过3D眼镜与显示器同步的信号来实现。 imax眼镜和普通3d眼镜有区别,区别如下: 1、原理不同:imax3d眼镜放映时采用偏振光式放映,观看时以配戴偏光眼镜来分析立体图像。普通3d眼镜用肉眼观看的话会呈现模糊的重影图像,只有通过对应的红蓝等立体眼镜才可以看到立体效果,就是对色彩进行红色和蓝色的过滤,红色的影像通过红色镜片,蓝色通过蓝色镜片,两只眼睛看到的不同影像在大脑中重叠呈现出3D立体效果。 2、特点不同:imax3d眼镜圆偏振眼睛受眼镜旋转角度影响较小,当观众歪头时基本不影响效果,而不像线偏振眼镜在观众歪头时会出现立体画面的虚影。通过偏振过滤眼镜或红外同步系统配合电子眼镜以提供两个单独的图像。结合IMAX巨幕,IMAX3D能够产生逼真的全视野立体效果。普通3d眼镜通过3D眼镜与显示器同步的信号来实现。当显示器输出左眼图像时,左眼镜片为透光状态,而右眼为不透光状态,而在显示器输出右眼图像时,右眼镜片透光而左眼不透光,这样两只眼镜就看到了不同的游戏画面,达到欺骗眼睛的目的。

如何将 y=mx+b 转换为 ax+by+c=0?

1、y=3x+13xy+1=02、y= - 2x+102x+y-10=0利用方程的性质进行变化。

蔡司contax zeissD35/1.4 mmj版本单反镜头镱头可以改口尼康单反相机么

YC口可以改尼康口的,可以无损改,下图就是此镜头改尼康口后的样子

IMAX-3D影院和UME影院有什么区别

UME影院是一个影院的名字,我杭州的,杭州UME是西城那个影城IMAX-3D是一种数字技术,可以让观众直接看到立体效果。国内无锡、上海、北京等地有。而普通电影院就两种:2D和3D的,2D的就是平时看的屏幕电影,3D则是要通过佩戴特殊眼镜观看而产生3D效果的一种技术。

华星umeimax哪排好

华星umeimax坐在倒数第四、倒数第三排好。影厅比较大,坐在靠后中间的位置适合观影。倒数第三、倒数第四排中间位置观影感较好,正好直视屏幕。

IMAX-3D影院和UME影院有什么区别

我小白了...UME是什么东西,不是一个影城吗..我同学这几天也一直在讨论看阿凡达去哪个影院看,不过一致认为IMAX的比较好.我也等着看呢,我这里好的影院票都被订光了!

ume华星imax是数字还是激光

激光。ume华星是IMAX公司最先进的投影系统,它采用激光投影技术,使视听效果更加清晰,颜色更加逼真,并且拥有更高的亮度。IMAX是创新的娱乐技术提供商,结合专有的软件、影院设计和设备,创造出一种身临其境般的体验,让观众感觉置身于电影之中。

英文Waxberry的来历

waxberryn. 杨梅;杨梅果wax1n.1. 蜡;蜂蜡;石蜡;蜡状物[U]He then coated it with wax.他然后在它上面涂了一层蜡。2. 耳垢[U]3. 【俚】唱片a.1. 蜡制的vt.1. 给...上蜡The floor has just been waxed.地板刚打过蜡。2. 【口】把...灌制唱片wax2vi.1. (月亮)渐圆,渐满The moon waxes till it becomes full, and then wanes.月亮渐渐变圆直至满盈,然后再变亏缺。2. 增加;变大Discord waxed at an alarming rate.冲突迅速加剧。3. (渐渐)变成,转为[L]The King waxed merry.国王高兴起来。n.[theS]1. 变大;增加Pileated woodpeckers are on the wax now.有羽冠的啄木鸟现在在增加。2. (新月到满月的)渐盈

北极裸体负荆跪求3D MAX9激活码

WSUGA3HVX4A8LQVP PJ6F1GJ3NHS5F8AZ

用3dsMax制作雪山场景中雪材质的具体步骤

第一步: 新建一个标准材质,命名为Snow。将阴影、过渡和高光全部设为纯白色。 第二步: 这是最关键的一步!钩选自发光通道,添加一个Mask贴图,Map设置为Gradient Ramp,Mask设置为Falloff。第三步: 设置Gradient Ramp。注意Gradient Ramp的图Type是Mapped,Source Map是Falloff,渐变色彩设置如图。靠右的深色控制的是雪的暗部色彩,靠中和左的浅色是雪的亮部和高光色,需要注意的是这些色彩的调整应该符合你制做的雪山场景的整体色彩,如果是黄昏的雪山场景,那么这几个色彩就要相应的有变化!这里需要自己多琢磨一下!Source Map设置也如图,用Mix Curve曲线可以控制雪的明暗,切记! 第四步: 然后返回Mask层,设置Mask的Falloff贴图。 第五步: 给高光强度通道一个Cellular贴图,将Size设置为0.4,钩选Fractal。将Glossiness值设为99。同时将这个Cellular贴图复制到凹凸贴图通道。(提示:凹凸贴图可以用刚才的Cellular贴图混合一个另外的贴图从而得到更自然的效果!) 第六步: 好了现在就大功告成了,最后雪山场景的样子应该是这样。 第七步: 不是太象,别着急,把它合并到顶底材质中,赋予给你制做好的带有置换的场景,并建立一个主光,(注意只用一盏灯即可)提高渲染采样,渲染!不出意外,应该就是以下的效果了!更多的效果都可以通过Gradient Ramp贴图来实现,开始研究吧!

拳皇2002里RYO的MAX超必怎么放?

〓子∑—>木你没玩过街机就不要乱说,AC要是脚,那你就没有手了。有玩拳皇的人都知道ryo的龙虎乱舞从94起就是用手的,用脚要是可以出的话,你就是拳皇第一高手了。近敌(在对手的旁边,走到可以推他后退的时候)+↓↘→同时按CA(就是双手同时按下去)01有些难出,如果是02,你不用近敌也可以出,不过要先暴气

如图,直线1经过点A(4,0)和点B(0,4),且与二次函数y=ax 2 的图象在第一象限内相交于点P,若△AOP的

解:∵直线1与两坐标轴分别交于点A(4,0),B(0,4),∴直线1的函数表达式为y=﹣x+4,设点P的坐标为(m,n),∵△AOP的面积为 ,∴ ,∴ .∵点P在直线1上,∴ ,得 ,∴P .∵点P在抛物线y=ax 2 上,∴ ,得 ,∴二次函数的解析式为y= x 2 .

直线l经过A(4,0)和B(0,4)两点,它与抛物线y=ax平方在第一象限内相交于点p,又知三角形aop的面积为

首先直线是y=-x+4,然后根据三角形面积公式,S=1/2底×高,结合直线可求P点(5/2,3/2),代入抛物线a=根号下(3/5)不知道答案对不对自己检查下

抛物线y=ax 2 +bx+c(a>0)的顶点为B(-1,m)(m≠0),并且经过点A(-3,0).(1)求此抛物线的解析

(1)抛物线的顶点为B(-1,m),因此,对称轴是直线x=-1.即- b 2a =-1 即有2a=b.①(1分)又抛物线过点A(-3,0),B(-1,m),得9a-3b+c=0,②a-b+c=m③(2分)解由①、②、③所组成的方程组,得a=- m 4 ,b=- m 2 ,c= 3 4 m ∴所求解析式为y=- m 4 x 2 - m 2 x+ 3 4 m (4分)(2)分两种情况讨论:①PA是等腰直角三角形AOP的斜边,此时OA=OP,又a>0,∴点P的坐标为(0,-3).将x=0,y=-3代入y=- m 4 x 2 - m 2 x+ 3 4 m 中,得m=-4.(6分)②OA是等腰直角三角形AOP的斜边.此时PA=PO,则可求得P(- 3 2 ,- 3 2 )将x=- 3 2 ,y=- 3 2 代入y=- m 4 x 2 - m 2 x+ 3 4 m 中,得m=- 8 5 ∴m的值为-4或- 8 5 (8分)

maxlumi2可以当显示器么

可以。1.Max Lumi+超级刷新=护眼显示屏Max Lumi的显示器2.0模式,配合BOOX独有的超级刷新技术,刷新响应快速,显示效果清晰,长时间浏览不伤眼。HDMI数据线可即插即用,护眼电脑。2.Max Lumi+蓝牙键盘=移动打字机给Max Lumi配一个蓝牙键盘,一台便携办公设备轻松Get!码字、收发邮件、网文阅读、文档编辑这些工作Max Lumi通通都可以帮你完成。用完直接装背包里,护眼方便。

ajax怎么实现图片的预览上传以及查看缩略图

这次给大家带来ajax怎么实现图片的预览上传以及查看缩略图,ajax实现图片的预览上传以及查看缩略图的注意事项有哪些,下面就是实战案例,一起来看一下。要实现功能,上传图片时可以预览,因还有别的文字,所以并不只上传图片,实现与别的文字一起保存,当然上来先上传图片,然后把路径和别的文字一起写入数据库;同时为图片生成缩略图,现只写上传图片方法,文字在ajax里直接传参数就可以了,若要上传多图,修改一下就可以了。借鉴了网上资料,自己写了一下,并不需要再新加页面,只在一个页面里就OK啦。JS代码://ajax保存数据,后台方法里实现此方法 function SaveData() { filename = document.getElementById("idFile").value; result =test_test_aspx.SaveData(filename).value; if (result) { alert("保存成功!"); } return false; } //实现预览功能 function DrawImage(ImgD) { var preW = 118; var preH = 118; var image = new Image(); image.src = ImgD.src; if (image.width > 0 && image.height > 0) { flag = true; if (image.width / image.height >= preW/ preH) { if (image.width > preW) { ImgD.width = preW; ImgD.height = (image.height * preW) / image.width; } else { ImgD.width = image.width; ImgD.height = image.height; } ImgD.alt = image.width + "x" + image.height; } else { if (image.height > preH) { ImgD.height = preH; ImgD.width = (image.width * preH) / image.height; } else { ImgD.width = image.width; ImgD.height = image.height; } ImgD.alt = image.width + "x" + image.height; } } } //当idFile内容改变时 function FileChange(Value) { flag = false; document.getElementById("showImg").style.display = "none"; document.getElementById("idImg").width = 10; document.getElementById("idImg").height = 10; document.getElementById("idImg").alt = ""; document.getElementById("idImg").src = Value; }以下为前台代码:<p class="cbs"> <p class="l"><label>图片:</label></p> <p> <input id="idFile" name="pic" type="file" runat="server" onchange="FileChange(this.value);" /> </p> </p> <p class="cbs"> <p class="l"><label>预览:</label></p> <p> <img id="idImg" height="0" width="0" src="" alt="" onload="DrawImage(this);" /> //实现预览 <img id="showImg" width="118" height="118" alt="" runat="server" style="display:none"/> //加这个主要是为了实现查看时显示图片,因为上面的(idImg)加上runat="server"报错,如有好的方法可以留言 </p> </p>以下为AJAX方法:[Ajax.AjaxMethod()] public bool SaveData(string fileNamePath) { string serverFileName = ""; string sThumbFile = ""; string sSavePath = "~/Files/"; int intThumbWidth = 118; int intThumbHeight = 118; string sThumbExtension = "thumb_"; try { //获取要保存的文件信息 FileInfo file = new FileInfo(fileNamePath); //获得文件扩展名 string fileNameExt = file.Extension; //验证合法的文件 if (CheckFileExt(fileNameExt)) { //生成将要保存的随机文件名 string fileName = GetFileName() + fileNameExt; //检查保存的路径 是否有/结尾 if (sSavePath.EndsWith("/") == false) sSavePath = sSavePath + "/"; //按日期归类保存 string datePath = DateTime.Now.ToString("yyyyMM") + "/" + DateTime.Now.ToString("dd") + "/"; if (true) { sSavePath += datePath; } //获得要保存的文件路径 serverFileName = sSavePath + fileName; //物理完整路径 string toFileFullPath = HttpContext.Current.Server.MapPath(sSavePath); //检查是否有该路径 没有就创建 if (!Directory.Exists(toFileFullPath)) { Directory.CreateDirectory(toFileFullPath); } //将要保存的完整文件名 string toFile = toFileFullPath + fileName; ///创建WebClient实例 WebClient myWebClient = new WebClient(); //设定windows网络安全认证 myWebClient.Credentials = CredentialCache.DefaultCredentials; //要上传的文件 FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read); //FileStream fs = OpenFile(); BinaryReader r = new BinaryReader(fs); //使用UploadFile方法可以用下面的格式 //myWebClient.UploadFile(toFile, "PUT",fileNamePath); byte[] postArray = r.ReadBytes((int)fs.Length); Stream postStream = myWebClient.OpenWrite(toFile, "PUT"); if (postStream.CanWrite) { postStream.Write(postArray, 0, postArray.Length); } postStream.Close(); //以上为原图 try { //原图加载 using (System.Drawing.Image sourceImage = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath(serverFileName))) { //原图宽度和高度 int width = sourceImage.Width; int height = sourceImage.Height; int smallWidth; int smallHeight; //获取第一张绘制图的大小,(比较 原图的宽/缩略图的宽 和 原图的高/缩略图的高) if (((decimal)width) / height <= ((decimal)intThumbWidth) / intThumbHeight) { smallWidth = intThumbWidth; smallHeight = intThumbWidth * height / width; } else { smallWidth = intThumbHeight * width / height; smallHeight = intThumbHeight; } //判断缩略图在当前文件夹下是否同名称文件存在 int file_append = 0; sThumbFile = sThumbExtension + System.IO.Path.GetFileNameWithoutExtension(fileName) + fileNameExt; while (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sThumbFile))) { file_append++; sThumbFile = sThumbExtension + System.IO.Path.GetFileNameWithoutExtension(fileName) + file_append.ToString() + fileNameExt; } //缩略图保存的绝对路径 string smallImagePath = System.Web.HttpContext.Current.Server.MapPath(sSavePath) + sThumbFile; //新建一个图板,以最小等比例压缩大小绘制原图 using (System.Drawing.Image bitmap = new System.Drawing.Bitmap(smallWidth, smallHeight)) { //绘制中间图 using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap)) { //高清,平滑 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.Clear(Color.Black); g.DrawImage( sourceImage, new System.Drawing.Rectangle(0, 0, smallWidth, smallHeight), new System.Drawing.Rectangle(0, 0, width, height), System.Drawing.GraphicsUnit.Pixel ); } //新建一个图板,以缩略图大小绘制中间图 using (System.Drawing.Image bitmap1 = new System.Drawing.Bitmap(intThumbWidth, intThumbHeight)) { //绘制缩略图 using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap1)) { //高清,平滑 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.Clear(Color.Black); int lwidth = (smallWidth - intThumbWidth) / 2; int bheight = (smallHeight - intThumbHeight) / 2; g.DrawImage(bitmap, new Rectangle(0, 0, intThumbWidth, intThumbHeight), lwidth, bheight, intThumbWidth,intThumbHeight, GraphicsUnit.Pixel); g.Dispose(); bitmap1.Save(smallImagePath, System.Drawing.Imaging.ImageFormat.Jpeg); return true; } } } } } catch { //出错则删除 System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath(serverFileName)); return false; } } else { return false; } } catch (Exception e) { return false; } } /// <summary> /// 检查是否为合法的上传文件 /// </summary> /// <param name="_fileExt"></param> /// <returns></returns> private bool CheckFileExt(string _fileExt) { string[] allowExt = new string[] { ".gif", ".jpg", ".jpeg" }; for (int i = 0; i < allowExt.Length; i++) { if (allowExt[i] == _fileExt) { return true; } } return false; } //生成随机数文件名 public static string GetFileName() { Random rd = new Random(); StringBuilder serial = new StringBuilder(); serial.Append(DateTime.Now.ToString("yyyyMMddHHmmssff")); serial.Append(rd.Next(0, 999999).ToString()); return serial.ToString(); }相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!推荐阅读:ajax怎样提交form表单与实现文件上传Ajax向后台传输json格式数据出现错误应如何处理

ajax的三级联动菜单栏如何实现

这次给大家带来ajax的三级联动菜单栏如何实现,ajax三级联动菜单栏实现的注意事项有哪些,下面就是实战案例,一起来看一下。本文实例为大家分享了ajax三级联动展示的具体代码,供大家参考,具体内容如下1. test.php<script src="../jquery-1.11.2.min.js"></script><script src="sanji.js"></script><title>无标题文档</title></head><body><h1>三级联动</h1><p id="sanji"></p></body></html>2. sanji.js// JavaScript Document$(document).ready(function(e) { //找到ID=SANJI的p,造三个下拉扔进去 $("#sanji").html("<select id="sheng"></select><select id="shi"></select><select id="qu"></select>"); //加载省的数据 LoadSheng(); //加载市的数据 LoadShi(); //加载区的数据 LoadQu(); //给省的下拉加点击事件 $("#sheng").click(function(){ //重新加载市 LoadShi(); //重新加载区 LoadQu(); }) //给市的下拉加点击事件 $("#shi").click(function(){ //重新加载区 LoadQu(); })});//加载省份的方法function LoadSheng(){ //省的父级代号 var pcode = "0001"; $.ajax({ async:false, url:"chuli.php", data:{pcode:pcode}, type:"POST", dataType:"TEXT", success: function(data){ var hang = data.trim().split("|"); var str = ""; for(var i=0;i<hang.length;i++) { var lie = hang[i].split("^"); str = str+"<option value=""+lie[0]+"">"+lie[1]+"</option>"; } $("#sheng").html(str); } });}//加载市的方法function LoadShi(){ //找市的父级代号 var pcode = $("#sheng").val(); $.ajax({ async:false, url:"chuli.php", data:{pcode:pcode}, type:"POST", dataType:"TEXT", success: function(data){ var hang = data.trim().split("|"); var str = ""; for(var i=0;i<hang.length;i++) { var lie = hang[i].split("^"); str = str+"<option value=""+lie[0]+"">"+lie[1]+"</option>"; } $("#shi").html(str); } });}//加载区的方法function LoadQu(){ //找区的父级代号 var pcode = $("#shi").val(); $.ajax({ url:"chuli.php", data:{pcode:pcode}, type:"POST", dataType:"TEXT", success: function(data){ var hang = data.trim().split("|"); var str = ""; for(var i=0;i<hang.length;i++) { var lie = hang[i].split("^"); str = str+"<option value=""+lie[0]+"">"+lie[1]+"</option>"; } $("#qu").html(str); } });}3. chuli.php<?php//给一个父级代号,返回该父级代号下所有的子地区require "DBDA.class.php";$db=new DBDA();$pcode=$_POST["pcode"];$sql="select areacode,areaname from chinastates where parentareacode="{$pcode}"";echo $db->StrQuery($sql);引用的封装类里面返回字符串的方法<?phpclass DBDA{ public $host = "localhost"; public $uid = "root"; public $pwd = "123"; public $dbname = "test_123"; //执行SQL语句返回相应的结果 //$sql 要执行的SQL语句 //$type 代表SQL语句的类型,0代表增删改,1代表查询 function query($sql,$type=0) { $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); $result = $db->query($sql); if($type) { //如果是查询,显示数据 return $result->fetch_all(); } else { //如果是增删改,返回true或者false return $result; } } //返回字符串的方法 public function strquery($sql,$type=1) { $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); $result = $db->query($sql); $arr = $result->fetch_all(); $str=""; foreach($arr as $v) { $str = $str.implode("^",$v)."|"; } $str = substr($str,0,strlen($str)-1); return $str; } //返回JSON function JSONQuery($sql,$type=1) { $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); $r = $db->query($sql); if($type==1) { return json_encode($r->fetch_all(MYSQLI_ASSOC)); } else { return $r; } }}相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!推荐阅读:怎样让浏览器记住ajax请求并控制浏览器前进和后退AJAX在不刷新的情况下检测输入的用户名

js里的$.ajax({...})是什么意思

jquery 的ajax 不是单纯的js的ajax

ajax怎样实现不刷新的情况下上传文件

这次给大家带来ajax怎样实现不刷新的情况下上传文件,ajax实现不刷新上传文件的注意事项有哪些,下面就是实战案例,一起来看一下。本文实例为大家分享了ajax实现无刷新上传文件功能的具体代码,供大家参考,具体内容如下详细代码如下<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>ajax无刷新上传文件</title><script>window.onload = function(){ var oBtn = document.getElementById("btn"); var oMyFile = document.getElementById("myFile"); oBtn.onclick = function() { //alert(oMyFile.value); //获取到的是file控件的value值,这个内容是显示给你看的文字,不是我们选择的文件 //oMyFile.files file控件中选择的文件列表对象 //alert(oMyFile.files); //我们是要通过ajax把oMyFile.files[0]数据发送给后端 /* for (var attr in oMyFile.files[0]) { console.log( attr + " : " + oMyFile.files[0][attr] ); } */ //利用ajax发送必须要有一个ajax对象 var xhr = new XMLHttpRequest(); //监听上传事件 xhr.onload = function(){ //alert(1); //alert(this.responseText);//后端返回的数据 var d = JSON.parse(this.responseText); alert(d.msg + " : " + d.url); //显示上传成功 并且显示文件路径 } xhr.open("post","post_file.php",true); //open打开的方式不能使用get,上传文件的地址,使用异步上传 //在使用post发送的时候必须要带一些请求头信息 xhr.setRequestHeader("X-Request-With", "XMLHttpRequest"); //send要发送数据 //将要上传的数据转换成二进制数据 //那么必须知道后端接收当前文件的名称是什么 然后后面带上当前文件的数据 var oFormData = new FormData(); //通过FormData来构建提交数据 oFormData.append("file",oMyFile.files[0]); xhr.send(oFormData); }}</script></head><body> <input type="file" id="myFile" /><input type="button" id="btn" value="上传" /></body></html>后端php代码post_file.php<?phpheader("Content-type:text/html; charset="utf-8"");$upload_dir = "uploads/";if(strtolower($_SERVER["REQUEST_METHOD"]) != "post"){ exit_status(array("code"=>1,"msg"=>"错误提交方式"));}if(array_key_exists("file",$_FILES) && $_FILES["file"]["error"] == 0 ){ $pic = $_FILES["file"]; if(move_uploaded_file($pic["tmp_name"], $upload_dir.$pic["name"])){ exit_status(array("code"=>0,"msg"=>"上传成功","url"=>$upload_dir.$pic["name"])); }}echo $_FILES["file"]["error"];exit_status(array("code"=>1,"msg"=>"出现了一些错误"));function exit_status($str){ echo json_encode($str); exit;}?>相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!推荐阅读:用CORS实现WebApi Ajax跨域请求的方法Ajax怎么实现动态加载组合框(附代码)

axios和ajax的区别在哪里?

区别在于ajax技术实现了网页的局部数据刷新,axios实现了对ajax的封装。

怎么用ajax如何实现大文件上传的功能

这次给大家带来怎么用ajax如何实现大文件上传的功能,用ajax实现大文件上传的注意事项有哪些,下面就是实战案例,一起来看一下。大家都知道php上传文件有限制,如果没有修改过php.ini文件的话,默认的上传大小限制为2M,那么该如何上传大文件了,比如说上传一个1G多的大文件,可以使用大文件切割上传的方式来解决。何为大文件切割上传? 原理:利用HTML5的新特性,将文件内容切割成分段的二进制信息,然后每次向服务器上传一段,而服务器,只需要把我们每次上传的二进制信息整合存储到一个文件中,那么最后这个文件就是所上传的文件。由于php.ini默认的上传大小为2M,如果每批都上传2M,我测试的时候时间比较长,这里我将其限制大小该为20M,最大post数据为28M,便于测试。如果实际开发中不能修改其参数,则每批上传的数据不能超过最大限制。post_max_size = 28M upload_max_filesize = 20M我的是在nginx里面上传所以还需要修改Nginx配置文件/etc/nginx/nginx.con//在http{} 里面加即可 client_max_body_size 50m#客户端最大上传大小 50MJavaScript中的File对象在之前的文章中我们已经使用到了这个Api,File对象中保存了文件的大小、名称、类型等信息JavaScript中的Blob对象 Blob对象是二进制对象,也是File对象的父类,Blob对象中有一个很重要的方法:slice() 方法,利用这个方法我们可以把文件内容切割成二进制信息。slice() 方法接受三个参数,起始偏移量,结束偏移量,还有可选的 mime 类型。如果 mime 类型,没有设置,那么新的 Blob 对象的 mime 类型和父级一样。上传页面index.php:<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>大文件切割上传</title> <link rel="stylesheet" href=""> <script> function selfile(){ const LENGTH = 1024 * 1024 * 10;//每次上传的大小 var file = document.getElementsByName("video")[0].files[0];//文件对象 var filename=document.getElementsByName("video")[0].files[0].name; var totalSize = file.size;//文件总大小 var start = 0;//每次上传的开始字节 var end = start + LENGTH;//每次上传的结尾字节 var fd = null//创建表单数据对象 var blob = null;//二进制对象 var xhr = null;//xhr对象 while(start < totalSize){ fd = new FormData();//每一次需要重新创建 xhr = new XMLHttpRequest();//需要每次创建并设置参数 xhr.open("POST","upload.php",false); blob = file.slice(start,end);//根据长度截取每次需要上传的数据 fd.append("video",blob);//添加数据到fd对象中 fd.append("filename",filename); //获取文件的名称 xhr.send(fd);//将fd数据上传 //重新设置开始和结尾 start = end; end = start + LENGTH; } } </script> </head> <body> <h1>大文件切割上传</h1> <input type="file" name="video" onchange="selfile();" /> </body> </html>接收数据页面upload.php:<?php /** * 大文件切割上传,把每次上传的数据合并成一个文件 */ $filename = "./uploads/".$_POST["filename"];//确定上传的文件名 //第一次上传时没有文件,就创建文件,此后上传只需要把数据追加到此文件中 if(!file_exists($filename)){ move_uploaded_file($_FILES["video"]["tmp_name"],$filename); }else{ file_put_contents($filename,file_get_contents($_FILES["video"]["tmp_name"]),FILE_APPEND); } ?>测试之前,先创建uploads文件夹如果是linux系统的话 切记给uploads给权限sudo chmod -R 777 uoloads/ //赋予uploads文件夹 777 权限 -R 递归子文件相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!推荐阅读:怎样用Ajax异步检查用户名有无重复ajax获取json数据为undefined应该如何使用

ajax请求的五个步骤

ajax请求的五个步骤如下步骤如下五个步骤1.创建异步对象,首先,创建一个XMLHttpRequest异步对象。2.设置请求方式和地址,然后,设置请求方式和请求地址3.用send发送请求,接着,用send发送请求。4.监听状态变化,然后,监听状态变化。5.接收返回的数据,最后,接收返回的数据

使用ajax 保存数据到数据库但不刷新页面!

客户端:新建一个任意名字.html <html> <head> <script type="text/javascript"> function test(name){ var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlHttp.open("GET","checkUser.asp?name="+name,true); xmlHttp.onreadystatechange = function(){ if(xmlHttp.readyState==4){ if(xmlHttp.status==200){ if(xmlHttp.responseText="yes") alert("可以用"); else alert("用户名已经存在!"); } } } xmlHttp.send(null); } </script> </head> <body> <input type="button" value="Ajax" onclick="test("aaa");"/> </body> </html> 服务器端:新建一个checkUser.asp <% "为了简化,我不读取数据库 if(Request.QueryString("name")="aaa") Response.Write("yes"); %>

thinkphp 验证是不是ajax提交

可以用,可以不用。

有没有方法可以使得前一个ajax请求没有处理完毕前,下一个ajax请求先等待?

//判断不同浏览器,采用不同方式创建XMLHttpRequest对象 function createXmlHttpRequest(){ if(window.ActiveXObject){ return new ActiveXObject("Microsoft.XMLHTTP");//windows浏览器 }else if(window.XMLHttpRequest){ return new XMLHttpRequest();//其他浏览器 } }

怎么实现Ajax的三级联动商品分类

这次给大家带来怎么实现Ajax的三级联动商品分类,实现Ajax的三级联动商品分类的注意事项有哪些,下面就是实战案例,一起来看一下。思路分析:效果:当页面加载时,利用ajax异步向后台请求数据,加载一级商品类别,当选择一级商品时加载二级商品,选择二级商品加载三级商品。实现:1、当拿到数据后加载pid为0的商品,并动态创建option将商品追加到一级菜单中,并设置value值2、当选择一级商品时加载pid=当前id的商品,并创建option将商品追加到二级菜单中,并设置value值3、当选择二级商品时加载pid=当前id的商品,并创建option将商品追加到三级菜单中,并设置value值页面效果:$(function(){ //请求路径 var url="03goods.php"; //option默认内容 var option="<option value="0">未选择</option>"; //获取jq对象 var $sel1=$(".sel1"); var $sel2=$(".sel2"); var $sel3=$(".sel3"); //自动生成一个<option>元素 function createOption(value,text){ var $option=$("<option></option>"); $option.attr("value",value); $option.text(text); return $option; } //加载数据 function ajaxSelect($select,id){ //get请求 $.get(url,{"pid":id},function(data){ $select.html(option); for(var k in data ){ $select.append(createOption(data[k].id,data[k].name)); } },"json"); } //自动加载第一个下拉菜单 ajaxSelect($sel1,"0"); //选择第一个下拉菜单时加载第二个 $sel1.change(function(){ var id=$sel1.val(); if(id=="0"){ $sel2.html(option); $sel3.html(option); }else{ ajaxSelect($sel2,id); } }); //选择第二个下拉菜单时加载第三个 $sel2.change(function(){ var $id=$sel2.val(); if($id=="0"){ $sel3.html(option); }else{ ajaxSelect($sel3,$id); } }); });后台代码:<?php header("Content-Type:text/html; charset=utf-8"); //数据 $arr=array( //array(分类id,分类名,分类的父id) array("id"=>"1","name"=>"数码产品","pid"=>"0"), array("id"=>"2","name"=>"家电","pid"=>"0"), array("id"=>"3","name"=>"书籍","pid"=>"0"), array("id"=>"4","name"=>"服装","pid"=>"0"), array("id"=>"5","name"=>"手机","pid"=>"1"), array("id"=>"6","name"=>"笔记本","pid"=>"1"), array("id"=>"7","name"=>"平板电脑","pid"=>"1"), array("id"=>"8","name"=>"智能手机","pid"=>"5"), array("id"=>"9","name"=>"功能机","pid"=>"5"), array("id"=>"10","name"=>"电视机","pid"=>"2"), array("id"=>"11","name"=>"电冰箱","pid"=>"2"), array("id"=>"12","name"=>"智能电视","pid"=>"10"), array("id"=>"13","name"=>"编程书籍","pid"=>"3"), array("id"=>"14","name"=>"JavaScript","pid"=>"13"), ); //获取指定分类的商品 function getByPid($arr,$pid){ $result=array(); foreach($arr as $v){ if($v["pid"]==$pid){ $result[]=$v; } } return $result; } //获取请求参数 $pid=isset($_GET["pid"])?$_GET["pid"]:"0"; $result=getByPid($arr,$pid); //输出json数据 echo json_encode($result);?>相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!推荐阅读:Ajax结合php怎么实现二级联动新手必看的Ajax技术组成与核心原理分析

Ajax权威指南的图书目录

前言第一部分 Ajax基本原理第1章 Web重生1.1 Web页面组件1.2 现代Web标准1.3 浏览器1.4 标准遵循1.5 欢迎来到w曲2.0第2章 从Web网站到Web应用程序2.1 转变2.2 基本的Web与Ajax设计模式2.3 应用程序环境2.4 开发人员2.5 Ajax不能做的事情第3章 服务器、数据库以及Web3.1 w曲服务器3.2 服务器端脚本3.3 数据库3.4 从关系数据库中存取数据3.5 连接到界面3.6 框架与语言3.7 框架有什么好处第4章 基础:编-写XML与JSON脚本4.1 XML4.2 JSON4.3 选择数据交换格式4.4 客户端框架简介4.5 简化开发第5章 模拟DOM5.1 理解DOM5.2 我们以前见过5.3 操纵DOM:元素、属性与对象5.4 更改样式5.5 DOMqb的事件5.6 用DOM填充表格5.7 innerHTML是魔鬼吗第6章 设计Ajax界面6.1 可用性6.2 功能性6.3 可视化6.4 可访问性6.5 Ajax界面第二部分 Ajax基础第7章 布局网站导航7.1 菜单7.2 选项卡7.3 导航辅助7.4 Ajax导航的问题7.5 总体布局第8章 表格与列表之乐8.1 不使用表格的布局8.2 可访问的表格8.3 表格排序8.4 带有样式的表格8.5 表格分页8.6 列表2.08.7 列表万金油第9章 不用框架的页面布局9.1 使用框架9.2 XHTML与框架9.3 Ajax与DIv的魔术9.4 页面布局第10章 导航栏与窗口10.1 警告框10.2 对窗口进行集成10.3 导航窗口10.4 工具提示10.5 必需的弹出框第11章 自定义客户端第12章 错误:(别具一格地)生存,还是毁灭第13章 这不是你老爸的动画第14章 在前往表单的路上发生的趣事第15章 数据验证:是客户,是服务器还是两者皆是第三部分 应用程序中的Ajax第16章 搜索:新领域第17章 Web服务介绍第18章 Web服务:API第19章 混搭第20章 用于企业通信需求第21章 无需插件的Internet游戏第四部分 打包第22章 模块化编码第23章 优化Ajax应用程序第五部分 附录

jqueryajax向后台传递数组以及如何在后台接收数组代码详解

JS中的数组是弱类型的可以放任何类型(对象、基本类型),但是如果数组中放的是对象类型,传递到后台是显示的只能是对象字符串--[object Object],原因如下: 在后台接收的时候,只能用request来接收,request.getParameterValues()方法返回的是一个String[],所以,应该是在前台传输的时候调用了对象的toString()方法,那么如果依然想传递对象怎么办?但是可以使用JSON字符串来实现,在后台把JSON字符串解析成JAVA对象。 也许,你要说如果是复合对象怎么办,比如如下: public class Person { private String username; private String password; private Address addr; }Person对象里有个Address类型的addr属性,没关系,任何对象最终用到的属性值都是基本数据类型,只需要使用对应的包装类型parseInt、或者parseXXX解析即可。 实现: OK,原理就是这么个。先看JS如何写: var as = []; var temp = []; for ( var int = 0; int < 5; int++) { temp.push("{"k":"); temp.push(int); temp.push(","v":"); temp.push(int); temp.push("}"); as.push(temp.join("")); } //Jquery中的方法,具体参考Jquery API $.post( "servlet/AjaxServlet?m=putWarningRule",{"aa":as} );最终拼成的串就是如下样式,(只作举例) {"k":0,"v":0}后台接收,不讨论任何框架,只需要HttpServletRequest即可 String[] jsonArr = request.getParameterValues("aa[]");有一点需要注意,在js中传参的时候参数名叫"aa",而在后台接收的时候却是"aa[]",这里应该是Jquery做了转换,所以最好的方式就是在JS中就改为"aa[]",之所以这里没有写"[]"是为了说明问题。可以使用如下方式打印request中的所有参数 Enumeration<String> names = request.getParameterNames(); while (names.hasMoreElements()) { String string = (String) names.nextElement(); System.out.println(string); }OK,至此为止,已经接收完毕,剩下的就是如何将一个JSON字符串转成一个POJO了。/** * 将对象转换为JSON格式的字符串 * @param obj * @return 返回JSON字符串 */ public static String toJSONAsString(Object obj){ try { return JSONMapper.toJSON(obj).render(false); } catch (MapperException e) { e.printStackTrace(); } return null; } @SuppressWarnings("unchecked") public static <T> T jsonToObject(String jsonStr, Class<T> targetClass) throws TokenStreamException, RecognitionException, MapperException{ JSONValue jv = new JSONParser(new StringReader(jsonStr)).nextValue(); return (T) JSONMapper.toJava(jv,targetClass); } //test public static void main(String[] args) throws Exception { Person p = new Person(); p.setK("a"); p.setV("v"); String json = toJSONAsString(p); Person np = jsonToObject(json,Person.class); System.out.println(np.getK()+"=="+np.getV()); }request取到值后,遍历数组,挨个转换 Person p = JSONUtils.jsonToObject(jsonArr[0], Person.class);Person类如下: public class Person { private String k; private String v; public String getK() { return k; } public void setK(String k) { this.k = k; } public String getV() { return v; } public void setV(String v) { this.v = v; } }有时候会出现问题,后台接收不到该值。解决办法: 设置jQuery.ajax的tradional属性$.ajax({ url: "/xxx", type: "GET", data: { "boxIds": boxIds, "boxType": 0, "time": new Date().getTime() }, traditional: true,//这里设置为true success: function(data) { //do sth... }});请求参数2这次参数不带”[]”了,并且后台可以成功接收到该数组。

为什么我写的ajax读不出本地文本?下面是html和js

1、纯html是无法直接读取txt文件内容的,这是很肯定的没有疑问的。html就是我们常说的静态文件,是无法读取处理服务器或本地机上的TXT文件的。2、读取txt文件内容可以用JS的ajax读取。ajax读取文本内容原理较为简单,重点基础是熟悉XMLHTTP对象的属性和方法。相关例子:<script>function dotxt(){var request=null;if(window.XMLHttpRequest){request=new XMLHttpRequest();}else if(window.ActiveXObject){request=new ActiveXObject("Microsoft.XMLHTTP");}if(request){request.open("GET","1.txt",true);"测试读取1.txt的内容request.onreadystatechange=function(){if(request.readyState===4){if (request.status == 200 || request.status == 0){document.getElementById("vv").innerHTML=request.responseText;}}}request.send(null);}else{alert("error");}} </script><input type="button" value="读取" onclick="dotxt();"/><div id="vv"></div>

如何实现ajax前台后台跨域请求

本篇文章通过前台跨域请求处理以及后台跨域的数据处理方式介绍,详细分析了ajax跨域的问题,对此有需要的朋友学习下。最近一直在搞公众号前台开发,遇到了ajax跨域请求的问题,像地区的省-市-县三级联动、汽车品牌-车系-车款的三级联动查询等都需要调用外部接口(其他工程项目的接口)完成。下面就分享一下个人解决跨域请求的方案,当然是在后台程序猿大哥的帮助下,我才弄明白了其中的渊源,赶紧记录下来慢慢积累,也希望对大家能有所帮助,还请积极提出意见或建议。跨域请求需要借助后台代码接收callback回调函数,对json数据进行进一步处理;前台再用ajax请求向服务器发送callback参数,并指定数据格式为jsonp。一、后台对跨域请求进行处理1.CarBrandController.java(汽车品牌接口java文件),这里列出的方法主要用来根据不同的level值查询对应的品牌、车系、车款,在这里对跨域请求做一个接收回调函数的处理,如果返回的callback为null,则不是跨域请求,不需要做特殊处理,直接打印json接口数据即可;如果返回的callback不为null,则表示跨域请求,这时要对json数据做一个特殊处理,即在json数据的外层加一对小括号包起来,具体请看HttpAdapter.java文件中的printlnJSONObject方法。public void json(HttpServletRequest request,HttpServletResponse response){ Map<String,Object>map=new HashMap<String, Object>(); String id = request.getParameter("id"); //接收ajax请求带过来的id String level = request.getParameter("level"); //接收ajax请求带过来的level String callback=request.getParameter("callback"); //接收ajax请求带过来的callback参数 if ("1".equals(level)) { //如果level是"1",则查询第一级目录内容 map.put("results", this.carBrandService.findByAttr(null, "first_letter asc")); //调用查询方法,结果放入map } else if ("2".equals(level)) { //如果level是"2",则查询第二级目录内容 map.put("results", this.carSerieService.findByAttr("parent_id="+id, "first_letter asc"));//调用查询方法,结果放入map } else if ("3".equals(level)) { //如果level是"3",则查询第三极目录内容 map.put("results", this.carModelYearService.findByAttr("parent_id="+id, "jian_pin desc"));//调用查询方法,结果放入map } map.put("level",level); if (null==callback) { //如果接收的callback值为null,则是不跨域的请求,输出json对象 HttpAdapter.printlnObject(response, map); }else{ //如果接收的callback值不为null,则是跨域请求,输出跨域的json对象 HttpAdapter.printlnJSONPObject(response, map, callback); } }2.HttpAdapter.java(输出对象的java文件),printlnObject方法打印正常json字符串;printlnJSONObject方法对json字符串进行了特殊处理。/** * 打印对象 * @param response * @param object */ public static void printlnObject(HttpServletResponse response,Object object){ PrintWriter writer=getWriter(response); writer.println(JSON.toJSONString(object)); } /** * 打印跨域对象 * @param response * @param object */ public static void printlnJSONPObject(HttpServletResponse response,Object object,String callback){ PrintWriter writer=getWriter(response); writer.println(callback+"("+JSON.toJSONString(object)+")"); }二、前台ajax跨域请求数据写法1:向服务器发送一个参数callback=?,同时指定dataType为"jsonp"的格式,跨域请求时指定的数据格式必须是jsonp的形式。function loadData(obj,level,id,value){ $.ajax({ url:"http://192.168.1.106:8086/carBrand/json.html?level="+level+"&id="+id+"&callback=?", //将callback写在请求url后面作为参数携带 type:"GET", async:false, dataType:"jsonp", success:function(data){ console.log(data); //其他处理(动态添加数据元素) }); }写法2:callback不需要写在url中,但是要指定jsonp参数为"callback",并给jsonpCallback参数一个值。function loadData(obj,level,id,value){ $.ajax({ url:"http://192.168.1.106:8086/carBrand/json.html?level="+level+"&id="+id, type:"GET", dataType:"jsonp", jsonp: "callback", //将callback写在jsonp里作为参数连同请求一起发送 jsonpCallback:"jsonpCallback1", success:function(data){ console.log(data); }); }以上两种写法的含义是一样的,只是写法不同罢了。接下来补充一下jsonp的工作原理。三、jsonp跨域的原理解析jsonp的最基本的原理是:动态添加一个<script>标签,而script标签的src属性是没有跨域的限制的。这样说来,这种跨域方式其实与ajax XmlHttpRequest协议无关了.JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问JSONP即JSON with Padding。由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源。如果要进行跨域请求,我们可以通过使用html的script标记来进行跨域请求,并在响应中返回要执行的script代码,其中可以直接使用JSON传递javascript对象。这种跨域的通讯方式称为JSONP。jsonCallback 函数jsonp1236827957501(....): 是浏览器客户端注册的,获取跨域服务器上的json数据后,回调的函数Jsonp原理:首先在客户端注册一个callback (如:"jsoncallback"), 然后把callback的名字(如:jsonp1236827957501)传给服务器。注意:服务端得到callback的数值后,要用jsonp1236827957501(......)把将要输出的json内容包括起来,此时,服务器生成 json 数据才能被客户端正确接收。然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 "jsoncallback"的值 jsonp1236827957501 .最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时javascript文档数据,作为参数,传入到了客户端预先定义好的 callback 函数(如上例中jquery $.ajax()方法封装的的success: function (json))里.(动态执行回调函数)可以说jsonp的方式原理上和<script src="http://跨域/...xx.js"></script>是一致的(qq空间就是大量采用这种方式来实现跨域数据交换的) .JSONP是一种脚本注入(Script Injection)行为,所以也有一定的安全隐患.上面是我整理给大家的,希望今后会对大家有帮助。相关文章:有关Express中log4js实际用法使用NodeJS如何实现WebSocket功能使用JS获得节点元素的方法

ajax 请求返回的数据是什么?

1. ajax请求的页面只要返回你需要的东西,比如username, 如果index.php页面返回很多东西,你可以另外写个index2.php,只返回需要的。2.ajax请求后,得到数据,需要写js方法处理返回的数据,就是所谓的回调函数,在这个函数里,就是你要处理的东西,比如把返回结果填充到username 字段,或password字段,更具体的你要上网了解下AJAX的工作原理。 其实很简单的。

ajax获取到json数据怎么显示在jsp页面tb上?

第一步:在你的Action中创建一个json数据public class AjaxAction extends ActionSupport{ /** * */private static final long serialVersionUID = 1L; private String result; public String getResult() { return result; } public void setResult(String result) { this.result = result; }public String getjson() { JSONObject json = new JSONObject(); json.put("name","张三"); json.put("password","123456"); result=json.toString(); return SUCCESS;}第二步:编写struts.xml文件中的内容<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <!-- 设置开发者模式 修改action中的名字可以不用重启服务器 --> <constant name="struts.devMode" value="true"></constant> <!-- 只有在后缀中有(.do)的才经过,这个value可以自己修改 --> <constant name="struts.action.extension" value="do"></constant> <!-- 开启动态方法调用 --> <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <package name="default" extends="json-default" namespace=""> <action name="ajax" class="com.action.AjaxAction" method="getjson"> <result name="success">/ajaxjson.jsp</result> <result type="json" ><!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 --> <param name="root">result</param> </result> </action> </package> </struts>凡是使用Struts2序列化对象到JSON的action,所在的package必须继承自json-default,注意,这里唯一的result,没有指定name属性。parm设置name=“root”表示局部刷新,返回根目录页面.第三步:首先先了解Ajax的原理:这是用jQuery做的,需要引 jsfunction testCheck(num){ $.ajax({ type:"post",//提交方式url:"TestCheckServlet",//提交地址async:true,//是否异步请求dataType:"html",//返回类型data:{"num":num},//传过去的值success:function(data,textStatus){//成功执行的方法var json=eval("("+data+")");//将传过来的数据转json,也可以传过来就是json数据免得麻烦转 alert(json.name); }, error:function(){//失败执行的方法alert("error"); } }) }思路:1、在input的onblur事件中进行验证。2、通过ajax发送手机号给后台Servlet。3、Servlet对手机号进行数据库查询,返回是否存在的文字给ajax。4、ajax收到返回文字后,显示到标签上。总结:Ajax能够让浏览器和服务器进行交互,并且在不刷新页面的情况下对网页内容进行更新,大大提高了用户体验,通过Ajax技术能够构建交互性极强的Web应用程序。

ajax返回整个页面或div

1. ajax请求的页面只要返回你需要的东西,比如username, 如果index.php页面返回很多东西,你可以另外写个index2.php,只返回需要的。2.ajax请求后,得到数据,需要写js方法处理返回的数据,就是所谓的回调函数,在这个函数里,就是你要处理的东西,比如把返回结果填充到username 字段,或password字段,更具体的你要上网了解下AJAX的工作原理。 其实很简单的。

如何使用HTML5中postMessage实现Ajax中的POST跨域问题的详细介绍

HTML5中提供了在网页文档之间相互接收与发送信息的功能。使用这个功能,只要获取到网页所在窗口对象的实例,不仅仅同源(域+端口号)的web网页之间可以互相通信,甚至可以实现跨域通信。浏览器支持程度:IE8+,firefox4+,chrome8+ opera10+1. 首先,要想接收从其他的窗口发过来的消息,就必须对窗口对象的message事件进行监听,如下代码:window.addEventListener(“message”, function(){},false);2. 其次,需要使用window对象的postMessage方法向其他窗口发送消息,该方法定义如下所示:otherWindow.postMessage(message, targetOrigin);该方法使用2个参数,第一个参数为所发送的消息文本,但也可以是任何javascript对象,第二个参数是接收消息的对象窗口的url地址(比如:http:127.0.0.1:8080/) , 但是我们也可以在url地址字符串中使用通配符”*”, 指定全部的域下,但是我们还是建议使用特定的域名下,otherWindow为要发送窗口对象的引用。Demo演示:假如现在我在hosts文件下 ,绑定2 个域名如下:127.0.0.1 abc.example.com127.0.0.1 longen.example.com现在假如在abc.example.com域下有一个abc.html页面,在longen.example.com域下有def.html页面,现在我是希望这2个不同域名下的页面能互相通信,abc.html代码如下:<form> <p> <label for="message" style="color:red;font-size:24px;">给iframe子窗口发一个信息:</label> <input type="text" name="message" value="send" id="message" /> <input type="submit" value="submit" id="submit"/> </p> </form> <h4>目标iframe传来的信息:</h4> <p id="test">暂无信息</p> <iframe id="iframe" src="http://longen.example.com/webSocket/def.html" style="display:none"></iframe>JS代码如下:var win = document.getElementById("iframe").contentWindow;document.getElementById("submit").onclick = function(e){ e.preventDefault(); win.postMessage(document.getElementById("message").value,"http://longen.example.com"); } window.addEventListener("message",function(e){ e.preventDefault(); document.getElementById("test").innerHTML = "从" + e.origin + "那里传过来的消息: " + e.data;},false);Def.html代码如下:HTML代码:<form> <p> <label for="message">给父窗口abc.html发个信息:</label> <input type="text" name="message" value="send" id="message" /> <input type="submit" /> </p> </form> <p id="test2">暂无信息。</p>JS代码如下:var parentwin = window.parent; window.addEventListener("message",function(e){ document.getElementById("test2").innerHTML = "从父窗口传来的域" +e.origin + ",和内容数据:" + e.data; parentwin.postMessage("HI!你给我发了"<span>"+e.data+""</span>。","http://abc.example.com");},false);当我点击abc.html页面后,可以看到效果如下,从def.html返回内容了。如下:我们需要知道如下几条信息:通过对window对象的message事件进行监听,可以接收消息。通过访问message事件的origin属性,可以获取消息的发送源。通过访问message事件的data属性,可以取得消息内容。使用postMessage方法发送消息。通过访问message事件的source属性,可以获取消息发送源的窗口对象(准确的说,应该是窗口的代理对象)。有了上面的基本知识点,我们可以延伸为实现ajax POST跨域的问题。二:使用postMessage 知识点解决 ajax中POST跨域问题。原理:原理也很简单,假如我们的域名abc.example.com下的abc.html页面需要发ajax请求(跨域,域名为longen.example.com)下,那么我们还是先跨页面文档的形式,和上面一样,我们可以现在longen.example.com下 建立一个页面,比如叫def.html. 那么我们现在还是在 abc.html 页面嵌入一个隐藏域iframe src路径指向longen.example.com域下def,html页面。过程还是和跨文档类似,只是现在在def.html页面中 在window.onmessage 事件内写ajax请求即可,如下代码:abc.example.com下的abc.html页面如下:html代码和上面一样,下面是JS代码:var win = document.getElementById("iframe").contentWindow;document.getElementById("submit").onclick = function(e){ e.preventDefault(); win.postMessage(document.getElementById("message").value,"http://longen.example.com/"); } window.addEventListener("message",function(e){ e.preventDefault(); alert(typeof e.data) var json = JSON.parse(e.data); console.log(json); alert(json.url)},false);def.html代码如下:JS代码如下://获取跨域数据 window.onmessage = function(e){ $.ajax({ url: "http://longen.example.com/webSocket/test.php", type:"POST", dataType:"text", //data: {msg:e.data}, success: function(res) { var parentwin = window.parent; parentwin.postMessage(res,"http://abc.example.com");//跨域发送数据 } }); };test.php代码如下:<?php $data=array( url =>1, name =>"2", "xx-xx"=>"xx" ); echo json_encode($data);?>如上实现方式 就可以实现ajax post跨域了。

怎么用AJAX实现瀑布流

这次给大家带来怎么用AJAX实现瀑布流,用AJAX实现瀑布流的注意事项有哪些,下面就是实战案例,一起来看一下。瀑布流是当前一种比较流行的网站界面布局方式,参差不齐的多栏布局以及到达底部自动加载的方式,使网站在视觉和用户体验上都能得到较大的提升。最早使用此布局的是国外的图片网站Pinterest,之后国内的一些图片网站也开始使用瀑布流布局,包括和Pinterest类似的花瓣网、图片社区lofter、美丽说、蘑菇街等等。瀑布流在布局上对于大多数人来说应该是很简单的,比较只有几列而已。瀑布流最主要的还是数据的异步加载。首先说一下这次实例所用的瀑布流式方法。瀑布流布局实现的方法很多,具体可以自行百度,此处不再赘述。本文中瀑布流实现方法为四列布局(li*4),每个图片为一个盒子(p>img+p),从后台读取数据后赋值给盒子中的元素,判定此时高度最小的列(li),然后将盒子添加到对应的列(li),之后进行下一次判定,以此类推,直至本页所有数据加载完成。代码部分:html+css<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>瀑布流布局</title> <style type="text/css"> *{ margin: 0; padding: 0; } ul{ width: 1200px; margin: 0 auto; } ul li{ float: left; width: 250px; list-style: none; margin: 20px; } ul li p{ width: 250px; margin-bottom: 20px; padding: 10px; box-sizing: border-box; border-radius: 5px; box-shadow: 2px 2px 10px #919B9C; } ul li img{ width: 100%; margin-bottom: 10px; } ul li p{ font-family: "microsoft yahei"; font-size: 14px; } </style> <script src="ajax.js" type="text/javascript" charset="utf-8"></script> <script src="pubuliu.js" type="text/javascript" charset="utf-8"></script> </head> <body> <ul id="ul1"> <li></li> <li></li> <li></li> <li></li> </ul> </body> </html>javascript部分:ajax部分和实现部分/** * * @param {Object} method get和post方式 * @param {Object} url 文件路径 * @param {Object} data 页码 * @param {Object} success 成功的函数 */ function ajax(method, url, data, success) { var xhr = null; try { xhr = new XMLHttpRequest(); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } if (method == "get" && data) { url += "?" + data; } xhr.open(method,url,true); if (method == "get") { xhr.send(); } else { xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded"); xhr.send(data); } xhr.onreadystatechange = function() { if ( xhr.readyState == 4 ) { if ( xhr.status == 200 ) { success && success(xhr.responseText); console.log(xhr.responseText); } else { alert("出错了,Err:" + xhr.status); } } } } ajax部分是在之前所写的Ajax工作原理以及函数的简单封装上修改而来,理解那个之后看这个基本没难度。这个相对那个来说多了一个data参数,data是用来读取数据的页码。window.onload = function() { //获取界面节点 var ul = document.getElementById("ul1"); var li = document.getElementsByTagName("li"); var liLen = li.length; var page = 1; var bool = false; //调用接口获取数据 loadPage();//首次加载 /** * 加载页面的函数 */ function loadPage(){ ajax("get", "getPics.php", "cpage="+page, function(data) { //将数据库中获取的数据转换成数组形式,这里要根据数据库中的数据形式来写,这里我获取到的是json形式 var data = JSON.parse(data); //将数据写入到p中 for(var i = 0; i < data.length; i++) { var index = getShort(li);//查找最短的li //创建新的节点:p>img+p var p = document.createElement("p"); var img = document.createElement("img"); img.src = data[i].preview;//img获取图片地址 img.alt = "等着吧..." //根据宽高比计算img的高,为了防止未加载时高度太低影响最短Li的判断 img.style.height = data[i].height * (230 / data[i].width) + "px"; p.appendChild(img); var p = document.createElement("p"); p.innerHTML = data[i].title;//p获取图片标题 p.appendChild(p); //加入到最短的li中 li[index].appendChild(p); } bool = true;//加载完成设置开关,用于后面判断是否加载下一页 }); } window.onscroll = function (){ var index = getShort(li); var minLi = li[index]; var scrollTop = document.documentElement.scrollTop||document.body.scrollTop; if(minLi.offsetHeight+minLi.offsetTop<scrollTop+document.documentElement.clientHeight){ //开关为开,即上一页加载完成,才能开始加载 if(bool){ bool = false; page++; loadPage(); } } } } /** * 获取数组中高度最小的索引 * @param {Object} li 数组 */ function getShort(li) { var index = 0; var liHeight = li[index].offsetHeight; for(var i = 0; i < li.length; i++) { if(li[i].offsetHeight < liHeight) { index = i; liHeight = li[i].offsetHeight; } } return index; }这部分的功能主要是动态的将生成的p写入到页面中,其中包含对盒子样式的修改和数据的写入,数据通过ajax函数从服务器端获取。需要注意的是:该实例的运行依赖于服务器,所以需要在本地搭建一个简单的服务器,快速搭建可以使用WampService。下面是我们数据来源的php代码:<?php header("Content-type:text/html; charset="utf-8""); /* API: getPics.php 参数 cpage : 获取数据的页数 */ $cpage = isset($_GET["cpage"]) ? $_GET["cpage"] : 1; $url = "http://www.wookmark.com/api/json/popular?page=" . $cpage; $content = file_get_contents($url); $content = iconv("gbk", "utf-8", $content); echo $content;相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!推荐阅读:Ajax+PHP的数据交互实现Ajax的循环如何实现

怎样实现用ajax向服务器发送请求并接收服务器返回的数据,并在HTML页面的Table中显示?

比如服务器上有张表或者listid name sex1 张三 男2 李四 女3 王五 男你首先在后台代码中把这个表处理成为JSON格式然后用Response.write的方法输出来,比如这样[{id:1,name:"张三",sex:"男"},{id:2,name:"李四",sex:"女"},{id:3,name:"王五",sex:"男"}]JSON是用于在JS中描述实体对象的一种方式,具体关于JSON的知识可以看w3school.com.cn上的相关内容,我这儿就不给你细讲了,很简单,我只说做法:为了方便使用,你需要在你的页面中引用jQuery库,我不知道你用什么语言做的后台程序,原理一样$.ajax({ url:"这里换成你写好的用于把表转换成JSON的后台处理文件地址,比如a.aspx?参数", type:"POST",//这里是AJAX请求的方式 dataType:"JSON",//如果你回发的内容是JSON格式的就用这个,否则用Text或其他 data:{ 参数1:值, 参数2:值, ...... 参数n:值 },//要发送的参数,如果无参数可以不写此项 success:function(data) { //此处写入发送成功后要处理的代码,而参数里的这个data,就是请求成功后返回来的上面那个格式的JSON,你可以用data[i]的值来取其中一行,如取张三的数据就是 data[0].name,就取出了张三的name属性 所以你可以在这里用循环去处理data,然后将结果用document.write的方式输出来就完成了。 }, error:function(XMLHttpRequest,Error,F) { //出错后可以在这里给出提示,Error参数表示错误信息 }}); 还有弄不清楚的地方可以继续和我探讨。

请问为什么AJAX在传输数据的时候要使用JSON格式?有什么好处吗?别说规定啊 我想知道原理。

ajax一般用xml,字符串,json三种方式用json,一个结构清晰,二是容易转成对象调用,你可以谷歌一下json格式的好处。。自己查询的更加清晰深刻。

解释jsonp的原理,以及为什么不是真正的ajax

http://blog.csdn.net/u010861514/article/details/46238033jsonp就是ajax,区别就是一个是跨域一个不跨域,还有接收参数形式不一样!

原生js如何实现AJAX、JSONP及DOM加载完成事件

一、JS原生Ajaxajax:一种请求数据的方式,不需要刷新整个页面;ajax的技术核心是 XMLHttpRequest 对象;ajax 请求过程:创建 XMLHttpRequest 对象、连接服务器、发送请求、接收响应数据;下面简单封装一个函数,之后稍作解释 ajax({ url: "./TestXHR.aspx", //请求地址 type: "POST", //请求方式 data: { name: "super", age: 20 }, //请求参数 dataType: "json", success: function (response, xml) { // 此处放成功后执行的代码 }, fail: function (status) { // 此处放失败后执行的代码 } }); function ajax(options) { options = options || {}; options.type = (options.type || "GET").toUpperCase(); options.dataType = options.dataType || "json"; var params = formatParams(options.data); //创建 - 非IE6 - 第一步 if (window.XMLHttpRequest) { var xhr = new XMLHttpRequest(); } else { //IE6及其以下版本浏览器 var xhr = new ActiveXObject("Microsoft.XMLHTTP"); } //接收 - 第三步 xhr.onreadystatechange = function () { if (xhr.readyState == 4) { var status = xhr.status; if (status >= 200 && status < 300) { options.success && options.success(xhr.responseText, xhr.responseXML); } else { options.fail && options.fail(status); } } } //连接 和 发送 - 第二步 if (options.type == "GET") { xhr.open("GET", options.url + "?" + params, true); xhr.send(null); } else if (options.type == "POST") { xhr.open("POST", options.url, true); //设置表单提交时的内容类型 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send(params); } } //格式化参数 function formatParams(data) { var arr = []; for (var name in data) { arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name])); } arr.push(("v=" + Math.random()).replace(".")); return arr.join("&"); }1、创建1.1、IE7及其以上版本中支持原生的 XHR 对象,因此可以直接用: var oAjax = new XMLHttpRequest();1.2、IE6及其之前的版本中,XHR对象是通过MSXML库中的一个ActiveX对象实现的。有的书中细化了IE中此类对象的三种不同版本,即MSXML2.XMLHttp、MSXML2.XMLHttp.3.0 和 MSXML2.XMLHttp.6.0;个人感觉太麻烦,可以直接使用下面的语句创建: var oAjax=new ActiveXObject("Microsoft.XMLHTTP");2、连接和发送2.1、open()函数的三个参数:请求方式、请求地址、是否异步请求(同步请求的情况极少,至今还没用到过);2.2、GET 请求方式是通过URL参数将数据提交到服务器的,POST则是通过将数据作为 send 的参数提交到服务器;2.3、POST 请求中,在发送数据之前,要设置表单提交的内容类型;2.4、提交到服务器的参数必须经过 encodeURIComponent() 方法进行编码,实际上在参数列表”key=value”的形式中,key 和 value 都需要进行编码,因为会包含特殊字符。每次请求的时候都会在参数列表中拼入一个 “v=xx” 的字符串,这样是为了拒绝缓存,每次都直接请求到服务器上。 encodeURI() :用于整个 URI 的编码,不会对本身属于 URI 的特殊字符进行编码,如冒号、正斜杠、问号和井号;其对应的解码函数 decodeURI(); encodeURIComponent() :用于对 URI 中的某一部分进行编码,会对它发现的任何非标准字符进行编码;其对应的解码函数 decodeURIComponent();3、接收3.1、接收到响应后,响应的数据会自动填充XHR对象,相关属性如下 responseText:响应返回的主体内容,为字符串类型; responseXML:如果响应的内容类型是 "text/xml" 或 "application/xml",这个属性中将保存着相应的xml 数据,是 XML 对应的 document 类型; status:响应的HTTP状态码; statusText:HTTP状态的说明;3.2、XHR对象的readyState属性表示请求/响应过程的当前活动阶段,这个属性的值如下 0-未初始化,尚未调用open()方法; 1-启动,调用了open()方法,未调用send()方法; 2-发送,已经调用了send()方法,未接收到响应; 3-接收,已经接收到部分响应数据; 4-完成,已经接收到全部响应数据;只要 readyState 的值变化,就会调用 readystatechange 事件,(其实为了逻辑上通顺,可以把readystatechange放到send之后,因为send时请求服务器,会进行网络通信,需要时间,在send之后指定readystatechange事件处理程序也是可以的,我一般都是这样用,但为了规范和跨浏览器兼容性,还是在open之前进行指定吧)。3.3、在readystatechange事件中,先判断响应是否接收完成,然后判断服务器是否成功处理请求,xhr.status 是状态码,状态码以2开头的都是成功,304表示从缓存中获取,上面的代码在每次请求的时候都加入了随机数,所以不会从缓存中取值,故该状态不需判断。4、ajax请求是不能跨域的!二、JSONPJSONP(JSON with Padding) 是一种跨域请求方式。主要原理是利用了script 标签可以跨域请求的特点,由其 src 属性发送请求到服务器,服务器返回 js 代码,网页端接受响应,然后就直接执行了,这和通过 script 标签引用外部文件的原理是一样的。JSONP由两部分组成:回调函数和数据,回调函数一般是由网页端控制,作为参数发往服务器端,服务器端把该函数和数据拼成字符串返回。比如网页端创建一个 script 标签,并给其 src 赋值为 http://www.superfiresun.com/json/?callback=process, 此时网页端就发起一个请求。服务端将要返回的数据拼好最为函数的参数传入,服务端返回的数据格式类似”process({‘name":"superfiresun"})”,网页端接收到了响应值,因为请求者是 script,所以相当于直接调用 process 方法,并且传入了一个参数。单看响应返回的数据,JSONP 比 ajax 方式就多了一个回调函数。 function jsonp(options) { options = options || {}; if (!options.url || !options.callback) { throw new Error("参数不合法"); } //创建 script 标签并加入到页面中 var callbackName = ("jsonp_" + Math.random()).replace(".", ""); var oHead = document.getElementsByTagName("head")[0]; options.data[options.callback] = callbackName; var params = formatParams(options.data); var oS = document.createElement("script"); oHead.appendChild(oS); //创建jsonp回调函数 window[callbackName] = function (json) { oHead.removeChild(oS); clearTimeout(oS.timer); window[callbackName] = null; options.success && options.success(json); }; //发送请求 oS.src = options.url + "?" + params; //超时处理 if (options.time) { oS.timer = setTimeout(function () { window[callbackName] = null; oHead.removeChild(oS); options.fail && options.fail({ message: "超时" }); }, time); } }; //格式化参数 function formatParams(data) { var arr = []; for (var name in data) { arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[i])); } return arr.join("&"); }1、因为 script 标签的 src 属性只在第一次设置的时候起作用,导致 script 标签没法重用,所以每次完成操作之后要移除;2、JSONP这种请求方式中,参数依旧需要编码;3、如果不设置超时,就无法得知此次请求是成功还是失败;三、模仿JQuery中的ready()事件1、DOMContentLoaded事件,在DOM树加载完成之后立即执行,始终会在load之前执行。 IE9+、FF、Chrome、Safari3.1+和Opera9+都支持该事件。 对于不支持该事件的浏览器,可以使用如下代码:setTimeout(function(){// 代码块}, 0) ; DOMContentLoaded 事件只能通过 DOM2 级方式添加,即采用addEventListener()/attachEvent() 方式添加才能够使用。事件对象不会提供任何额外信息。2、readystatechange事件 IE为DOM文档中的某些部分(区别于 XHR 对象的 readystatechange 事件)提供了该事件,这个事件的目的是提供与文档或元素的加载状态有关的信息,但这个事件的行为有时候也很难预料。支持该事件的对象都有一个readyState属性,注意,不是 event 事件对象。IE、Firefox4+和Opera 支持该事件。readyState属性的值如下: “uninitialized” - 未初始化:对象存在但尚未初始化; “loading” - 正在加载:对象正在加载数据; “loaded” - 加载完毕,对象加载数据完毕; “interactive” - 交互:可以操作对象了,但还没有完全加载; “complete” - 完成:对象已经加载完成;2.1、并非所有的对象都会经历readyState的这几个阶段,如果这个阶段不适用某个对象,则该对象完全可能跳过该阶段,并没有规定哪个阶段适用于哪个对象。这意味着 readystatechange 事件经常会少于4次,相对应的 readyState 属性值也不是连续的。2.2、对于 document 而言,interactive 和 complete 阶段会在于 DOMContentLoaded 大致相同的时刻触发 readystatechange 事件;load 事件和 readystatechange 事件的触发顺序会因页面的外部资源的多少而变化,也就是说,readystatechange 事件并不会一直在 load 事件之前执行。外部资源越多,对 readystatechange 事件就越有利。interactive 和 complete 的顺序也是不一致的,谁都有可能先执行,引用的外部资源越多,对交互阶段越有利。所以为了尽可能早的执行代码,两个状态要同时判断。3、doScroll IE5.5+支持,当页面中有滚动条时,可以用 doScroll("right")/doScroll("down") 等来移动滚动条,这个方法只有等DOM加载完成以后才能用,所以在IE低版本浏览器中可以通过这个属性判断 DOM 结构是否加载完成。介绍这个属性主要是模仿 jquery 中的解决方案。function ready(readyFn) { //非IE浏览器 if (document.addEventListener) { document.addEventListener("DOMContentLoaded", function () { readyFn && readyFn(); }, false); } else { //方案1和2 哪个快用哪一个 var bReady = false; //方案1 document.attachEvent("onreadystatechange", function () { if (bReady) { return; } if (document.readyState == "complete" || document.readyState == "interactive") { bReady = true; readyFn && readyFn(); }; }); //方案2 //jquery也会担心doScroll会在iframe内失效,此处是判断当前页是否被放在了iframe里 if (!window.frameElement) { setTimeout(checkDoScroll, 1); } function checkDoScroll() { try { document.documentElement.doScroll("left"); if (bReady) { return; } bReady = true; readyFn && readyFn(); } catch (e) { // 不断检查 doScroll 是否可用 - DOM结构是否加载完成 setTimeout(checkDoScroll, 1); } }; } };注:setTimeout(checkDoScroll, 1); 目的是让浏览器尽快执行 checkDoScroll 函数,间隔时间设置为 1ms,对当下的浏览器来说是不太可能的。每个浏览器都有自己默认的最小间隔时间,即使时间设置为最小间隔时间,也只是代表隔这些时间过去之后,JavaScript 会把 checkDoScroll 加入到执行队列中,如果此时 JavaScript 进程空闲,则会立即执行该代码。

AJAX的常用语法是什么

我们都知道, ajax目前已经是一门很普遍的技术了,本文主要介绍了原生JS中的ajax的实现原理以及XMLHttpRequest及promise的概念和流程。Ajax是目前很普遍的一门技术,也是很值得探讨和研究的一门技术。本文将针对Ajax的发展过程并结合其在不同库框架中的使用方式来和大家分享下Ajax的那些新老语法。Ajax简介Ajax全称为“Asynchronous Javascript And XML”, 即“异步JavaScript和XML”的意思。通过Ajax我们可以向服务器发送请,在不阻塞页面的情况下进行数据交互,也可以理解为异步数据传输。在Ajax的帮助下我们的网页只需局部刷新即可更新数据的显示,减少了不必要的数据量,大大提高了用户体验,缩短了用户等待的时间,使得web应用程序更小、更快,更友好。当然以上都是司空见惯的内容了,作为一名合格的开发人员基本都再熟悉不过了,这里只为那些刚入门的新手做一个简单的介绍。原生Ajax基本上所有现代的浏览器都支持原生Ajax的功能,下面就来详细介绍下利用原生JS我们怎样来发起和处理Ajax请求。获取XMLHttpRequest对象var xhr = new XMLHttpRequest(); // 获取浏览器内置的XMLHttpRequest对象如果你的项目应用不考虑低版本IE,那么可以直接用上面的方法,所有现代浏览器 (Firefox、Chrome、Safari 以及 Opera) 都内建了 XMLHttpRequest 对象。如果需要兼容老版本IE(IE5、IE6),那么可以使用 ActiveX 对象:var xhr;if (window.XMLHttpRequest) { xhr=new XMLHttpRequest();} else if (window.ActiveXObject) { // 兼容老版本浏览器 xhr=new ActiveXObject("Microsoft.XMLHTTP");}参数配置有了XMLHttpRequest对象,我们还需要配置一些请求的参数信息来完成数据交互,利用open方法即可:var xhr;if (window.XMLHttpRequest) { xhr=new XMLHttpRequest();} else if (window.ActiveXObject) { xhr=new ActiveXObject("Microsoft.XMLHTTP");}if (xhr) { xhr.open("GET", "/test/", true); // 以GET请求的方式向"/test/"路径发送异步请求}open方法为我们创建了一个新的http请求,其中第一个参数为请求方式,一般为"GET"或"POST";第二个参数为请求url;第三个参数为是否异步,默认为true。发送请求配置完了基本参数信息,我们直接调用send方法发送请求,代码如下:var xhr;if (window.XMLHttpRequest) { xhr=new XMLHttpRequest();} else if (window.ActiveXObject) { xhr=new ActiveXObject("Microsoft.XMLHTTP");}if (xhr) { xhr.open("GET", "/test/", true); xhr.send(); // 调用send方法发送请求}这里需要注意的是如果使用GET方法传递参数,我们可以直接将参数放在url后面,比如"/test/?name=luozh&size=12";如果使用POST方法,那么我们的参数需要写在send方法里,如:xhr.open("POST", "/test/", true);xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); // 将请求头设置为表单方式提交xhr.send("name=luozh&size=12");最终会以Form Data的形式传递:如果不设置请求头,原生Ajax会默认使用Content-Type是"text/plain;charset=UTF-8"的方式发送数据,如果按照上面的参数书写形式,我们最终传输的形式这样的:显然这并不是服务器期望的数据格式,我们可以这样写:xhr.open("POST", "/test/", true);xhr.send(JSON.stringify({name: "luozh", size: 12}));这样我们可以直接传递JSON字符串给后台处理,当然后台也许进行相应配置。监测状态发送完Ajax请求之后,我们需要针对服务器返回的状态进行监测并进行相应的处理,这里我们需要使用onreadystatechange方法,代码如下:var xhr;if (window.XMLHttpRequest) { xhr=new XMLHttpRequest();} else if (window.ActiveXObject) { xhr=new ActiveXObject("Microsoft.XMLHTTP");}if (xhr) { xhr.open("GET", "/test/", true); // 以GET请求的方式向"/test/"路径发送异步请求 xhr.send(); xhr.onreadystatechange = function () { // 利用onreadystatechange监测状态 if (xhr.readyState === 4) { // readyState为4表示请求响应完成 if (xhr.status === 200) { // status为200表示请求成功 console.log("执行成功"); } else { console.log("执行出错"); } } }}上面我们利用onreadystatechange监测状态,并在内部利用readyState获取当前的状态。readyState一共有5个阶段,当其为4时表示响应内容解析完成,可以在客户端调用了。当readyState为4时,我们又通过status来获取状态码,状态码为200时执行成功代码,否则执行出错代码。当然我们可以用onload来代替onreadystatechange等于4的情况,因为onload只在状态为4的时候才被调用,代码如下xhr.onload = function () { // 调用onload if (xhr.status === 200) { // status为200表示请求成功 console.log("执行成功"); } else { console.log("执行出错"); } }然而需要注意的是,IE对onload这个属性的支持并不友好。 除了onload还有:1.onloadstart2.onprogress3.onabort4.ontimeout5.onerror6.onloadend等事件,有兴趣的同学可以亲自去实践它们的用处。以上便是原生Ajax请求数据的常见代码。其他库框架中的AjaxjQuery中的AjaxjQuery作为一个使用人数最多的库,其Ajax很好的封装了原生Ajax的代码,在兼容性和易用性方面都做了很大的提高,让Ajax的调用变得非常简单。下面便是一段简单的jQuery的Ajax代码:$.ajax({ method: "GET", // 1.9.0本版前用"type" url: "/test/", dataType: "json"}).done(function() { console.log("执行成功");}).fail(function() { console.log("执行出错");})与原生Ajax不同的是,jQuery中默认的Content-type是"application/x-www-form-urlencoded; charset=UTF-8", 想了解更多的jQuery Ajax的信息可以移步官方文档:http://api.jquery.com/jquery.ajax/Vue.js中的AjaxVue.js作为目前热门的前端框架,其实其本身并不包含Ajax功能,而是通过插件的形式额外需要在项目中引用,其官方推荐Ajax插件为vue-resource,下面便是vue-resource的请求代码:Vue.http.get("/test/").then((response) => { console.log("执行成功");}, (response) => { console.log("执行出错");});3.Angular.js中的Ajax这里Angular.js中的Ajax主要指Angular的1.×版本,因为Angular2目前还不建议在生产环境中使用。var myApp = angular.module("myApp",[]);var myCtrl = myApp.controller("myCtrl",["$scope","$http",function($scope, $http){ $http({ method: "GET", url: "/test/", headers: {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"} }).success(function (data) { console.log("执行成功"); }).error(function () { console.log("执行出错"); });}]);在Angular中,我们需要在控制器上注册一个$http的事件,然后才能在内部执行Ajax。Angular的Ajax默认的Content-type是"application/json;charset=UTF-8",所以如果想用表单的方式提交还需设置下headers属性。4.React中的Ajax在React中我比较推荐使用fetch来请求数据,当然其不仅适用于React,在任何一种框架如上面的Vue、Angular中都可以使用,因为其已经被目前主流浏览器所支持,至于其主要功能和用法,我在下面会做下讲解。Fetch APIFetch API 是基于 Promise 设计,由于Promise的浏览器兼容性问题及Fetch API本身的兼容问题,一些浏览器暂时不支持Fetch API,浏览器兼容图如下:当然我们可以通过使用一些插件来解决兼容性问题,比如:fetch-polyfill、es6-promise、fetch-ie8等。使用Fetch我们可以非常便捷的编写Ajax请求,我们用原生的XMLHttpRequst对象和Fetch来比较一下:XMLHttpRequst API// XMLHttpRequst APIvar xhr = new XMLHttpRequest();xhr.open("GET", "/test/", true);xhr.onload = function() { console.log("执行成功");};xhr.onerror = function() { console.log("执行出错");};xhr.send();Fetch API fetch("/test/").then(function(response) { return response.json();}).then(function(data) { console.log("执行成功");}).catch(function(e) { console.log("执行出错");});可以看出使用Fetch后我们的代码更加简洁和语义化,链式调用的方式也使其更加流畅和清晰。随着浏览器内核的不断完善,今后的XMLHttpRequest会逐渐被Fetch替代。关于Fetch的详细介绍可以移步:https://segmentfault.com/a/1190000003810652跨域Ajax介绍了各种各样的Ajax API,我们不能避免的一个重要问题就是跨域,这里重点讲解下Ajax跨域的处理方式。处理Ajax跨域问题主要有以下4种方式:1.利用iframe2.利用JSONP3.利用代理4.利用HTML5提供的XMLHttpRequest Level2第1和第2种方式大家应该都非常熟悉,都属于前端的活,这里就不做介绍了,这里主要介绍第3和第4种方式。利用代理的方式可以这样理解:通过在同域名下的web服务器端创建一个代理:北京服务器(域名:www.beijing.com)上海服务器(域名:www.shanghai.com)比如在北京的web服务器的后台(www.beijing.com/proxy-shanghaiservice.php)来调用上海服务器(www.shanghai.com/services.php)的服务,然后再把访问结果返回给前端,这样前端调用北京同域名的服务就和调用上海的服务效果相同了。利用XMLHttpRequest Level2的方式需要后台将请求头进行相应配置:// php语法header("Access-Control-Allow-Origin: *");header("Access-Control-Allow-Methods: GET,POST");以上的*号可以替换成允许访问的域名,*表示所有域名都可以访问。由此可见,第3和第4种方式主要是后台的活,前端只需调用就可以。总结无论Ajax的语法多么多变,无论库和框架如何封装Ajax,其只是一种实现异步数据交互的工具,我们只需理解原生JS中Ajax的实现原理,了解XMLHttpRequest及promise的概念和流程,便可以轻松的在数据异步交互的时代游刃有余。相信看了这些案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!相关阅读:CSS的文本字体颜色如何设置css里的font文字怎么设置 Css3中的transform 渐变属性怎么使用

ajax 实现一个请求,请求进度百分比计算的原理是什么。

ajax.process,貌似只有jquery的xhr对象才有

ajax jsonData 怎么传两个json 格式的数据吗

啊嘎嘎谁是哥哥哥哥

ajax访问本地文件‘.

那个不是 磁盘文件的地址 ,是一个网页地址 ,ajax异步提交xmlhttp.open("GET","/ajax/test1.txt",true);的三个参数 第一个是get 方式还是 post 方式 第二个是 提交到的地址 ,第三个参数 是同步提交还是异步提交, 你在写一个servlet 或者 action 提交过去 ,.xmlhttp.responseText是到指定url 运行后 返回的 值, 你再多看一下ajax的原理

AJAX的原理—如何做到异步和局部刷新【实现代码】

Overriew: onReadyStateChange被回调函数赋值,则能实现异步调用,回调函数直接操作DOM,则能实现局部刷新。那么XMLHttpRequest的onReadyStateChange如何知道服务ready了呢?状态如何change了呢(观察者模式)?则是通过客户端对服务的状态询问(定期轮询)所实现的。详解:1. XMLHttpRequest 负责与服务器端的通讯,其内部有很多重要的属性:readyStatus=4,status=200等等。当XMLHttpRequest的整体状态并且保证它已经完成(readyStatus=4),即数据已经发送完毕。然后根据服务器的设定询问(类似于客户端会轮询服务器的返回状态,仍然是http短连接,并非长连接的服务器端push)请求状态,如果一切已经就绪(status=200),那么就执行需要的操作。操作一般就是直接操作DOM,所以AJAX能做到所谓的“无刷新”用户体验。document.getElementById("user1").innerHTML = "数据正在加载..."; if (xmlhttp.status == 200) { document.write(xmlhttp.responseText); }2. 那么在AJAX客户端如何做到的异步呢?实际上就是Javascript的回调函数起的作用提供一个回调JavaScript函数,一旦服务器响应可用,该函数就被执行业务函数:function castVote(rank) { var url = "/ajax-demo/static-article-ranking.html"; var callback = processAjaxResponse; executeXhr(callback, url);}需要异步通讯的函数: function executeXhr(callback, url) { // branch for native XMLHttpRequest object if (window.XMLHttpRequest) { req = new XMLHttpRequest(); req.onreadystatechange = callback; req.open("GET", url, true); req.send()(null); } // branch for IE/Windows ActiveX version else if (window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP"); if (req) { req.onreadystatechange = callback; req.open("GET", url, true); req.send()(); } }}req.onreadystatechange = callbackreq.open("GET", url, true)第一行定义了JavaScript回调函数,一旦响应就绪它就自动执行,而req.open()方法中所指定的“true”标志说明想要异步执行该请求。一旦服务器处理完XmlHttpRequest并返回给浏览器,使用req.onreadystatechange指派所设置的回调方法将被自动调用。回调函数:function processAjaxResponse() { if (req.readyState == 4) { // only if "OK" if (req.status == 200) { document.getElementById("user1").innerHTML = req.responseText; } else { alert("There was a problem retrieving the XML data:" + req.statusText); } }}以上这篇AJAX的原理—如何做到异步和局部刷新【实现代码】就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

ajax怎么获取request

1、这是Ajax异步Request:<script type="text/javascript"><!-- var request = false; try { request = new XMLHttpRequest(); } catch (trymicrosoft) { try { request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (othermicrosoft) { try { request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (failed) { request = false; } } } if (!request) alert("Error initializing XMLHttpRequest!"); //获取信息 function GetInfo() { var url = "test.aspx?userName=" + document.getElementById("txtName").value; request.open("GET", url, true); request.onreadystatechange = updatePageTime; request.send(null); } //更新页面 function updatePageTime() { if (request.readyState == 4) { if (request.status == 200) { var response = request.responseText; document.getElementById("txtLoginName").value = response; } else if (request.status == 404) { alert("Requested URL is not found."); } else if (request.status == 403) { alert("Access denied."); } else alert("status is " + request.status); } } // --></script> <form id="form1" runat="server"> <input id="txtName" onchange="GetInfo()" type="text" /> <input id="txtLoginName" type="text" /> </form> 2、下面是我对你的题目的自己的想法{ action : "online_state", params : { state : fld.value } }这种方式叫字面量写法,也可以叫json写法原理是大括号代表对象,中括号代表集合,大括号里面用字符串或者对象当做属性,加冒号来表示赋值由于JavaScript若类型语言的特性,可以把一个大括号包住的对象赋值给一个属性举例翻译成类写法就是a = 1;b = 2;同理}翻译一下就是a = 1;b = { aa=2; bb=3;}希望对你有帮助!

ajax原理:

ajax AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。 主要包含了以下几种技术Ajax(Asynchronous JavaScript + XML)的定义 基于web标准(standards-based presentation)XHTML+CSS的表示; 使用 DOM(Document Object Model)进行动态显示及交互; 使用 XML 和 XSLT 进行数据交换及相关操作; 使用 XMLHttpRequest 进行异步数据查询、检索; 使用 JavaScript 将所有的东西绑定在一起。英文参见Ajax的提出者Jesse James Garrett的原文。类似于DHTML或LAMP,AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。事实上,一些基于AJAX的“派生/合成”式(derivative/composite)的技术正在出现,如“AFLAX”。 AJAX的应用使用支持以上技术的web浏览器作为运行平台。这些浏览器目前包括:Mozilla、Firefox、Internet Explorer、Opera、Konqueror及Safari。但是Opera不支持XSL格式对象,也不支持XSLT。AJAX应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于XML的web service接口,并在客户端采用JavaScript处理来自服务器的响应。因为在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快 的应用。同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。Ajax应用程序的优势在于:1. 通过异步模式,提升了用户体验2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用3. Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。Ajax的工作原理Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不 阻塞用户。在创建Web站点时,在客户端执行屏幕更新为用户提供了很大的灵活性。下面是使用Ajax可以完成的功能:动态更新购物车的物品总数,无需用户单击Update并等待服务器重新发送整个页面。 提升站点的性能,这是通过减少从服务器下载的数据量而实现的。例如,在某购物车页面,当更新篮子中的一项物品的数量时,会重新载入整个页面,这必须下载整 个页面的数据。如果使用Ajax计算新的总量,服务器只会返回新的总量值,因此所需的带宽仅为原来的百分之一。 消除了每次用户输入时的页面刷新。例如,在Ajax中,如果用户在分页列表上单击Next,则服务器数据只刷新列表而不是整个页面。 直接编辑表格数据,而不是要求用户导航到新的页面来编辑数据。对于Ajax,当用户单击Edit时,可以将静态表格刷新为内容可编辑的表格。用户单击Done之后,就可以发出一个Ajax请求来更新服务器,并刷新表格,使其包含静态、只读的数据。一切皆有可能!但愿它能够激发您开始开发自己的基于Ajax的站点。然而,在开始之前,让我们介绍一个现有的Web站点,它遵循传统的提交/等待/重新显示的范例,我们还将讨论Ajax如何提升用户体验。Ajax的工作原理相当于在用户和服务器之间加了—个中间层,使用户操作与服务器响应异步化。这样把以前的一些服务器负担的工作转嫁到客户端,利于客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约ISP的空间及带宽租用成本的目的。

ajax长轮询

一般最原始的作法就是在客户端搞个定时器一直向后台请求,而ajax的长轮询与一般的http连接不一样,它发送的是长连接,比如说你发过去一个连接,它并不急于给你返回过来请求,而是等到后台有动作的时候才有相应,这样就减少了客户端的压力,现在很多地方都用到这种技术,比如说百度,新浪微博,比较成熟的框架有pushlet,另外servlet3.0也增加了异步的功能,也能很好的解决这个问题,HTML5在将来,这个问题就更简单了!如果你要研究,建议你深入的了解一下HTTP协议的内部工作原理,了解一下服务器的实现,希望能帮到你。

ASP如何用Ajax实现无刷新读取数据库信息(后台发布信息,前台不刷新也能看到)

前台必须要定义时比较吧

AJAX通信,A页面从B页面取值,是否一定得在B页面后台代码内通过response.write()获得?

问者的问题在于对AJAX异步读取数据内容的基础原理还不是十分清晰,下面先解释一下:AJAX通信中,A从B页面取值,实际上是通过A页面不动,然后通过在后台运行B页面。而A页面向B页面取值,实际上是取得B页面输出的页面内容。是B页面运行结束后的内容。例如:注册时,验证用户名称是否已被注册。1、输入框输入内容,然后促发JS代码。2、js代码通过参数形式(post,get方式随便)传递到B页面,而B页面就会执行。这里假设,如果是可以注册,页面输出1,不可以注册,输出0。3、在执行AJAX时,A页面的JS是可以设置读取返回数据的内容,是HTML,还是TEXT。也就是说,返回的内容实际上是B页的完整的html代码。即,如果是设置读取HTML的时候,返回的数据就是B页面的HTML代码,包含<html><body></body></html>等的内容;如果是设置读取TEXT的话,那么就是我们打开这个B页时,会见到的内容,1或者0;因此,对于你的问题,很难去回答。具体问题具体分析是比较好的。而AJAX的使用方式,建议是使用jquery。因为方便简单实用。

$.ajax传递json格式参数,某属性为null,取值为空字符串的问题。

data : {aa:""},

在jsp中通过Ajax判断注册的用户名是否存在,并且是不用通过跳转页面来判断的代码

<html> <head> <script type="text/javascript"> function $(tagId){ return document.getElementById(tagId); } function checkUserName(){ var name = $("nameId").value; var xhr; if(window.XMLHttpRequest){ xhr = new XMLHttpRequest(); }else if(window.ActiveXObject){ xhr = new ActiveXObject("Microsoft.XMLHttp"); } xhr.open("POST","/Ajax/userNameCheckServlet"); xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); xhr.send("userNeme="+name); xhr.onreadystatechange=function(){ if(xhr.readyState==4&&xhr.status==200){ var ret = xhr.responseText; var span = $("msgId"); //innerHTML作用 方便往标签中增加内容 span.innerHTML = "<font color="red">"+ret+"</font>" ; } } } </script> </head> <body> <table> <tr> <td>用户名:<input type="text" id="nameId" onblur="checkUserName();"/> <span id="msgId"></span></td> </tr> <tr> <td>密 码:<input type="password"/></td> </tr> <tr> <td align="center"><input type="button" value="确定"/></td> </tr> </table> </body></html>然后在servlet里判断是否用户名存在:package com.wsw.day01;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class UserNameCheckServlet extends HttpServlet{ @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("gbk"); response.setCharacterEncoding("gbk"); String userName = request.getParameter("userNeme"); System.out.println(userName); PrintWriter out = response.getWriter(); if("wsw".equals(userName)){ out.print("is ok"); }else{ out.print("is false"); } out.flush(); }}这里是简单的判断,实际应用的时候要连数据库,查询判断,反正都是这个原理

Ajax下同步异步执行下,用window.open()打开窗口的原理是什么?为什么会不一样?

我觉得原因是:

jquery ajax获取后台request中的值 ,前台AJAX如下,后台如图

亲,后端写的不对,用out对象像浏览器写数据。不然拿不到!

请问为什么AJAX在传输数据的时候要使用JSON格式?有什么好处吗?别说规定啊 我想知道原理。

ajax传递数据有很多种形式,因为json格式是js的,所以相对来说比较简单,出了json还可以是xml,只不过接受的时候比较麻烦,

淘宝登陆页面头部显示用户id是后台获取数据还是前端提供?采用的是什么技术?Ajax还是什么能告诉我原理吗

javascript,xml,后台异步

ajax怎样做到不刷新

实际是一种高级的JavaScript语言,你要学ajax就必须要知道JavaScript语言,关于无刷新,比如有的网站,旁边有个用户名登陆框

详解Ajax的原理及优缺点有哪些

这次给大家带来详解Ajax的原理及优缺点有哪些,使用Ajax的原理及优缺点的注意事项有哪些,下面就是实战案例,一起来看一下。1、ajax技术的背景不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth、google suggest以及gmail等对ajax技术的广泛应用,催生了ajax的流行。而这也让微软感到无比的尴尬,因为早在97年,微软便已经发明了ajax中的关键技术,并且在99年IE5推出之时,它便开始支持XmlHttpRequest对象,并且微软之前已经开始在它的一些产品中应用ajax,比如说MSDN网站菜单中的一些应用。遗憾的是,不知道出于什么想法,当时微软发明了ajax的核心技术之后,并没有看到它的潜力而加以发展和推广,而是将它搁置起来。对于这一点来说,我个人是觉得非常奇怪的,因为以微软的资源和它的战略眼光来说,应该不会看不到ajax技术的前景,唯一的解释也许就是因为当时它的主要竞争对手Netscape的消失反而使它变得麻痹和迟钝,毕竟巨人也有打盹的时候,比如IBM曾经在对微软战略上的失误。正是这一次的失误,成就了它现在的竞争对手google在ajax方面的领先地位,而事实上google目前在ajax技术方面的领先是微软所无法达到的,这一点在后面我讲述ajax缺陷的时候也会提到。现在微软也意识到了这个问题,因此它也开始在ajax领域奋起直追,比如说推出它自己的ajax框架atlas,并且在.NET2.0也提供了一个用来实现异步回调的接口,即ICallBack接口。那么微软为什么对自己在ajax方面的落后如此紧张呢?现在就让我们来分析一下ajax技术后面隐藏的深刻意义。2、ajax技术的意义我们在平时的开发中都多多少少的接触或者应用到了ajax,谈到ajax技术的意义,我们关注得最多的毫无疑问是提升用户的体验。但是,如果我们结合将来电脑和互联网的发展趋势,我们会发现ajax技术在某些方面正好代表了这种趋势。为什么这样说呢?我们知道,自从电脑出现以来,一直是桌面软件占据着绝对主导的地位,但是互联网的出现和成功使这一切开始发生着微妙的变化。相当一部分的人都相信,迟早有一天,数据和电脑软件将会从桌面转移到互联网。也就是说,将来的电脑有可能抛弃笨重的硬盘,而直接从互联网来获取数据和服务,我记得我念大学的时候,有位教授给我们上课的时候,曾经设想过这样一种情景,也许在将来的电脑桌面上,没有任何多余的软件和程序,而仅仅只有一个IE,虽然现在看起来我们距离这一天还很遥远,并且这其中还有很多的问题需要解决,但是我觉得这个并非梦想,而是迟早将实现的现实。那么,这其中的主要问题就是互联网的连接不稳定,谁也不愿意看着自己的电脑从服务器一点一滴的下载数据,那么,ajax是不是解决了这个问题呢,说实话,与其说ajax解决了这个问题,倒不如它只是掩盖了这个问题,它只是在服务器和客户端之间充当了一个缓冲器,让用户误以为服务没有中断。精确的说,ajax并不能提高从服务器端下载数据的速度,而只是使这个等待不那么令人沮丧。但是正是这一点就足以产生巨大的影响和震动,它实际上也对桌面软件产生了巨大的冲击。这一点我用一个例子来说明,我们可以比较一下Outlook Express和Gmail,前者是典型的桌面软件,后者是ajax所实现的B/S模式,实际上后者目前已经在慢慢取代前者了,Gmail在收发邮件的时候已经和Outlook Express的功能几乎没有差别了,而且它不需要安装客户端程序。这就是为什么微软对ajax所带来的冲击有着如此的恐惧心理,并且在它前不久所进行的调查之中,将google看做他们未来十年内的主要竞争对手的主要原因之一。当然,这种变化也并不会将桌面软件全部淘汰,现有的浏览器还没有一个能像PhotoShop等桌面程序那样处理复杂的图像。但是我们也不能忽视它带来的影响和冲击。3、关于ajax的名字ajax 的全称是Asynchronous JavaScript and XML,其中,Asynchronous 是异步的意思,它有别于传统web开发中采用的同步的方式。关于同步和异步异步传输是面向字符的传输,它的单位是字符;而同步传输是面向比特的传输,它的单位是桢,它传输的时候要求接受方和发送方的时钟是保持一致的。具体来说,异步传输是将比特分成小组来进行传送。一般每个小组是一个8位字符,在每个小组的头部和尾部都有一个开始位和一个停止位,它在传送过程中接收方和发送方的时钟不要求一致,也就是说,发送方可以在任何时刻发送这些小组,而接收方并不知道它什么时候到达。一个最明显的例子就是计算机键盘和主机的通信,按下一个键的同时向主机发送一个8比特位的ASCII代码,键盘可以在任何时刻发送代码,这取决于用户的输入速度,内部的硬件必须能够在任何时刻接收一个键入的字符。这是一个典型的异步传输过程。异步传输存在一个潜在的问题,即接收方并不知道数据会在什么时候到达。在它检测到数据并做出响应之前,第一个比特已经过去了。这就像有人出乎意料地从后面走上来跟你说话,而你没来得及反应过来,漏掉了最前面的几个词。因此,每次异步传输的信息都以一个起始位开头,它通知接收方数据已经到达了,这就给了接收方响应、接收和缓存数据比特的时间;在传输结束时,一个停止位表示该次传输信息的终止。按照惯例,空闲(没有传送数据)的线路实际携带着一个代表二进制1的信号。步传输的开始位使信号变成0,其他的比特位使信号随传输的数据信息而变化。最后,停止位使信号重新变回1,该信号一直保持到下一个开始位到达。例如在键盘上数字“1”,按照8比特位的扩展ASCII编码,将发送“00110001”,同时需要在8比特位的前面加一个起始位,后面一个停止位。同步传输的比特分组要大得多。它不是独立地发送每个字符,每个字符都有自己的开始位和停止位,而是把它们组合起来一起发送。我们将这些组合称为数据帧,或简称为帧。数据帧的第一部分包含一组同步字符,它是一个独特的比特组合,类似于前面提到的起始位,用于通知接收方一个帧已经到达,但它同时还能确保接收方的采样速度和比特的到达速度保持一致,使收发双方进入同步。帧的最后一部分是一个帧结束标记。与同步字符一样,它也是一个独特的比特串,类似于前面提到的停止位,用于表示在下一帧开始之前没有别的即将到达的数据了。同步传输通常要比异步传输快速得多。接收方不必对每个字符进行开始和停止的操作。一旦检测到帧同步字符,它就在接下来的数据到达时接收它们。另外,同步传输的开销也比较少。例如,一个典型的帧可能有500字节(即4000比特)的数据,其中可能只包含100比特的开销。这时,增加的比特位使传输的比特总数增加2.5%,这与异步传输中25 %的增值要小得多。随着数据帧中实际数据比特位的增加,开销比特所占的百分比将相应地减少。但是,数据比特位越长,缓存数据所需要的缓冲区也越大,这就限制了一个帧的大小。另外,帧越大,它占据传输媒体的连续时间也越长。在极端的情况下,这将导致其他用户等得太久。个小时,在这10个小时内水没有完全断,只是流量比原来小了很多,在10个小时后恢复正常流量,那么,如果是你你会选择哪种方式呢?显然是后者。4、ajax所包含的技术大家都知道ajax并非一种新的技术,而是几种原有技术的结合体。它由下列技术组合而成。1.使用CSS和XHTML来表示。2. 使用DOM模型来交互和动态显示。3.使用XMLHttpRequest来和服务器进行异步通信。4.使用javascript来绑定和调用。在上面几中技术中,除了XmlHttpRequest对象以外,其它所有的技术都是基于web标准并且已经得到了广泛使用的,XMLHttpRequest虽然目前还没有被W3C所采纳,但是它已经是一个事实的标准,因为目前几乎所有的主流浏览器都支持它。5、ajax原理和XmlHttpRequest对象Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。XMLHttpRequest是ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。所以我们先从XMLHttpRequest讲起,来看看它的工作原理。首先,我们先来看看XMLHttpRequest这个对象的属性。它的属性有:onreadystatechange 每次状态改变所触发事件的事件处理程序。responseText从服务器进程返回数据的字符串形式。responseXML从服务器进程返回的DOM兼容的文档数据对象。status从服务器返回的数字代码,比如常见的404(未找到)和200(已就绪)status Text伴随状态码的字符串信息readyState对象状态值0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)1 (初始化) 对象已建立,尚未调用send方法2 (发送数据) send方法已调用,但是当前的状态及http头未知3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,4 (完成) 数据接收完毕,此时可以通过通过responseXml和responseText获取完整的回应数据但是,由于各浏览器之间存在差异,所以创建一个XMLHttpRequest对象可能需要不同的方法。这个差异主要体现在IE和其它浏览器之间。下面是一个比较标准的创建XMLHttpRequest对象的方法。function CreateXmlHttp(){//非IE浏览器创建XmlHttpRequest对象if(window.XmlHttpRequest){xmlhttp=new XmlHttpRequest();}//IE浏览器创建XmlHttpRequest对象if(window.ActiveXObject){try{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){try{xmlhttp=new ActiveXObject("msxml2.XMLHTTP");}catch(ex){}}}}function TestAjax(){var data=document.getElementByIdx("username").value;CreateXmlHttp();if(!xmlhttp){alert("创建xmlhttp对象异常!");return false;}xmlhttp.open("POST",url,false);xmlhttp.onreadystatechange=function(){if(xmlhttp.readyState==4){document.getElementByIdx("user1").innerHTML="数据正在加载...";if(xmlhttp.status==200){document.write(xmlhttp.responseText);}}}xmlhttp.send();}如上所示,函数首先检查XMLHttpRequest的整体状态并且保证它已经完成(readyStatus=4),即数据已经发送完毕。然后根据服务器的设定询问请求状态,如果一切已经就绪(status=200),那么就执行下面需要的操作。对于XmlHttpRequest的两个方法,open和send,其中open方法指定了:a、向服务器提交数据的类型,即post还是get。b、请求的url地址和传递的参数。c、传输方式,false为同步,true为异步。默认为true。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作。我们需要根据实际需要来指定同步方式,在某些页面中,可能会发出多个请求,甚至是有组织有计划有队形大规模的高强度的request,而后一个是会覆盖前一个的,这个时候当然要指定同步方式。Send方法用来发送请求。知道了XMLHttpRequest的工作流程,我们可以看出,XMLHttpRequest是完全用来向服务器发出一个请求的,它的作用也局限于此,但它的作用是整个ajax实现的关键,因为ajax无非是两个过程,发出请求和响应请求。并且它完全是一种客户端的技术。而XMLHttpRequest正是处理了服务器端和客户端通信的问题所以才会如此的重要。现在,我们对ajax的原理大概可以有一个了解了。我们可以把服务器端看成一个数据接口,它返回的是一个纯文本流,当然,这个文本流可以是XML格式,可以是Html,可以是Javascript代码,也可以只是一个字符串。这时候,XMLHttpRequest向服务器端请求这个页面,服务器端将文本的结果写入页面,这和普通的web开发流程是一样的,不同的是,客户端在异步获取这个结果后,不是直接显示在页面,而是先由javascript来处理,然后再显示在页面。至于现在流行的很多ajax控件,比如magicajax等,可以返回DataSet等其它数据类型,只是将这个过程封装了的结果,本质上他们并没有什么太大的区别。6、ajax的优点Ajax的给我们带来的好处大家基本上都深有体会,在这里我只简单的讲几点:1、最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好。2、使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。4、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。7、ajax的缺点下面我着重讲一讲ajax的缺陷,因为平时我们大多注意的都是ajax给我们所带来的好处诸如用户体验的提升。而对ajax所带来的缺陷有所忽视。下面所阐述的ajax的缺陷都是它先天所产生的。1、ajax干掉了back按钮,即对浏览器后退机制的破坏。后退按钮是一个标准的web站点的重要功能,但是它没法和js进行很好的合作。这是ajax所带来的一个比较严重的问题,因为用户往往是希望能够通过后退来取消前一次操作的。那么对于这个问题有没有办法?答案是肯定的,用过Gmail的知道,Gmail下面采用的ajax技术解决了这个问题,在Gmail下面是可以后退的,但是,它也并不能改变ajax的机制,它只是采用的一个比较笨但是有效的办法,即用户单击后退按钮访问历史记录时,通过创建或使用一个隐藏的IFRAME来重现页面上的变更。(例如,当用户在Google Maps中单击后退时,它在一个隐藏的IFRAME中进行搜索,然后将搜索结果反映到Ajax元素上,以便将应用程序状态恢复到当时的状态。)但是,虽然说这个问题是可以解决的,但是它所带来的开发成本是非常高的,和ajax框架所要求的快速开发是相背离的。这是ajax所带来的一个非常严重的问题。2、安全问题技术同时也对IT企业带来了新的安全威胁,ajax技术就如同对企业数据建立了一个直接通道。这使得开发者在不经意间会暴露比以前更多的数据和服务器逻辑。ajax的逻辑可以对客户端的安全扫描技术隐藏起来,允许黑客从远端服务器上建立新的攻击。还有ajax也难以避免一些已知的安全弱点,诸如跨站点脚步攻击、SQL注入攻击和基于credentials的安全漏洞等。3、对搜索引擎的支持比较弱。4、破坏了程序的异常机制。至少从目前看来,像ajax.dll,ajaxpro.dll这些ajax框架是会破坏程序的异常机制的。关于这个问题,我曾经在开发过程中遇到过,但是查了一下网上几乎没有相关的介绍。后来我自己做了一次试验,分别采用ajax和传统的form提交的模式来删除一条数据??给我们的调试带来了很大的困难。5、另外,像其他方面的一些问题,比如说违背了url和资源定位的初衷。例如,我给你一个url地址,如果采用了ajax技术,也许你在该url地址下面看到的和我在这个url地址下看到的内容是不同的。这个和资源定位的初衷是相背离的。6、一些手持设备(如手机、PDA等)现在还不能很好的支持ajax,比如说我们在手机的浏览器上打开采用ajax技术的网站时,它目前是不支持的,当然,这个问题和我们没太多关系。8、ajax的几种框架目前我们采用的比较多的ajax框架主要有ajax.dll,ajaxpro.dll,magicajax.dll 以及微软的atlas框架。Ajax.dll和Ajaxpro.dll这两个框架差别不大,而magicajax.dll只是封装得更厉害一些,比如说它可以直接返回DataSet数据集,前面我们已经说过,ajax返回的都是字符串,magicajax只是对它进行了封装而已。但是它的这个特点可以给我们带来很大的方便,比如说我们的页面有一个列表,而列表的数据是不断变化的,那么我们可以采用magicajax来处理,操作很简单,添加magicajax之后,将要更新的列表控件放在magicajax的控件之内,然后在pageload里面定义更新间隔的时间就ok了,atlas的原理和magicajax差不多。但是,需要注意的一个问题是,这几种框架都只支持IE,没有进行浏览器兼容方面的处理,用反编译工具察看他们的代码就可以知道。除了这几种框架之外,我们平时用到的比较多的方式是自己创建xmlHttpRequest对象,这种方式和前面的几种框架相比更具有灵活性。另外,在这里还提一下aspnet2.0自带的异步回调接口,它和ajax一样也可以实现局部的无刷新,但它的实现实际上也是基于xmlhttprequest对象的,另外也是只支持IE,当然这是微软的一个竞争策略。9.ajax应用举例以上内容是转载高人写的资料,下面我将我在项目中实际应用给出个例子,这个例子是这样的:我参与的一个项目的值班安排模块里,选择值班人时,弹出的是个联系人树型TreeView结构图,点开哪个部门,然后部门下的联系人就展开了,原先是这样的,选择好某些联系人后,哪天白天或晚上的值班人就是这样的格式”小A,小B”,但是现在要求这样的格式”小A(部门一),小B(部门二)”这里假设小A属于部门一,小B属于部门二。由于选择联系人是纯前台javascript的操作的,这里要通过联系人userlist表中的部门id,来取得部门的名称,也就是通过前台取后台的数据,这个在系列五里我也阐述过,下面给出代码:var param= "date=<%=stryear%>/<%=strmonth%>/" + x <%=stryear%><%=strmonth%>+"&Type=" + type+"&Other=" + eval_r("formData.RBOTHER"+x+".value")+"&ZBRY=" + eval_r("formData.RBZBRY"+x+".value")+"&ZBRYID=" + eval_r("formData.RBZBRYID"+x+".value")+"&Demo=" + eval_r("formData.RBDEMO"+x+".value")+"&id=" + eval_r("formData.RBZBID"+x+".value");//传递的参数var retVal = window.showModalDialog( "chooseUsers.asp?"+param,this, "dialogWidth=280px; dialogHeight=500px; help=no; status=no; scroll=no; resizable=yes; ");//弹出对话框取得联系人//ajax调用服务器端方法取到部门名称if(retVal ["userIds"]!=""&& retVal ["userIds"]!=null)//联系人id集合格式1,2,3,4{var PostUrl=" ../../../Application/CallBoard/GetDepartMentByUid.aspx?userIDs="+objRetVal["userIds"]+"";//后台处理页面urlxmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//新建一个xmlhttprequest对象xmlHttp.open("POST", PostUrl, false);xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xmlHttp.send("");var builder= xmlHttp.responseText; //将值传递回来,拼成了新格式eval_r("formData.RBZBRY"+x+".value = "" +builder+""");// formData.RBZBRY为一文本控件,将显示值班人员新格式}}相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!推荐阅读:Ajax请求async有哪些方

AJAX的原理—如何做到异步和局部刷新

如何做到异步和局部刷新?下面小编就为大家带来一篇AJAX的原理—如何做到异步和局部刷新。现在分享给大家,也给大家做个参考。Overriew: onReadyStateChange被回调函数赋值,则能实现异步调用,回调函数直接操作DOM,则能实现局部刷新。那么XMLHttpRequest的onReadyStateChange如何知道服务ready了呢?状态如何change了呢(观察者模式)?则是通过客户端对服务的状态询问(定期轮询)所实现的。详解:1. XMLHttpRequest 负责与服务器端的通讯,其内部有很多重要的属性:readyStatus=4,status=200等等。当XMLHttpRequest的整体状态并且保证它已经完成(readyStatus=4),即数据已经发送完毕。然后根据服务器的设定询问(类似于客户端会轮询服务器的返回状态,仍然是http短连接,并非长连接的服务器端push)请求状态,如果一切已经就绪(status=200),那么就执行需要的操作。操作一般就是直接操作DOM,所以AJAX能做到所谓的“无刷新”用户体验。2. 那么在AJAX客户端如何做到的异步呢?实际上就是Javascript的回调函数起的作用提供一个回调JavaScript函数,一旦服务器响应可用,该函数就被执行业务函数:第一行定义了JavaScript回调函数,一旦响应就绪它就自动执行,而req.open()方法中所指定的“true”标志说明想要异步执行该请求。一旦服务器处理完XmlHttpRequest并返回给浏览器,使用req.onreadystatechange指派所设置的回调方法将被自动调用。回调函数:上面是我整理给大家的,希望今后会对大家有帮助。相关文章:深入浅析Nginx实现AJAX跨域请求问题AjaxToolKit之Rating控件的使用方法基于Ajax技术实现文件上传带进度条

ajax的工作原理是什么(附图解)

本篇文章主要和大家讲述ajax的工作原理,具有一定参考价值,感兴趣的朋友可以了解一下,希望对你有所帮助。 Ajax指Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。而实现的原理基础就是:网页DOM对象可以精确地对网页中的部分内容进行操作、XML作为单纯的数据存储载体使得客户端与服务器交换的只是网页内容的数据而没有网页样式等等的附属信息、XMLHttpRequest是与浏览器本身内置的request相互独立的与服务器交互的请求对象。 网页应用Ajax与服务器交互的抽象过程如下图: 过程详解: 1: 要使用Ajax技术,基础中的基础,就是要创建一个XMLHttpRequest对象,无它就没有异步传输的可能:var xmlhttp;if (window.XMLHttpRequest) { //检查浏览器的XMLHttpRequest属性,如果为真则支持XMLHttpRequest// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码xmlhttp=new XMLHttpRequest(); } else {// IE6, IE5 浏览器执行代码xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } 2:在网页中为某些事件的响应绑定异步操作:通过上面创建的xmlhttp对象传输请求、携带数据。在发出请求前要先定义请求对象的method、要提交给服务器中哪个文件进行请求的处理、要携带哪些数据、是否异步。 其中,与普通的request提交数据一样,这里也分两种方法:GET/POST xmlhttp.open("GET","/try/ajax/demo_get2.php?fname=Henry&lname=Ford",); xmlhttp.send();xmlhttp.open("POST","/try/ajax/demo_post2.php","Content-type","application/x-www-form-urlencoded");xmlhttp.send("fname=Henry&lname=Ford"); 3:服务器收到请求后,把附带的数据作为输入传给处理请求的文件,例如这里:把fname=Henry&lname=Ford作为输入,传给 /try/ajax/demo_get2.php 这个文件。然后文件根据传入的数据做出处理,最终返回结果,通过response对象发回去。客户端根据xmlhttp对象来获取response内容,然后调用DOM对象根据response内容来局部修改网页内容。xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200)//请求处理完毕且状态为成功 { document.getElementById("myDiv").innerHTML=xmlhttp.responseText;//用response内容来修改DOM中的元素的内容 } 其中,response的类型有两种:字符串类型和XML文本。两种回应的不同提取如下:responseText 属性返回字符串形式的响应:document.getElementById("myp").innerHTML=xmlhttp.responseText;如果来自服务器的响应是 XML,需要作为 XML 对象进行解析,使用 responseXML :xmlDoc=xmlhttp.responseXML; //获取服务器响应的XML文本并转换得到XMLDOM对象txt="";x=xmlDoc.getElementsByTagName("ARTIST");//通过XMLDOM对象调用方法来获取XML对象中的内容for (i=0;i<x.length;i++) {txt=txt + x[i].childNodes[0].nodeValue + "<br>"; }document.getElementById("myDiv").innerHTML=txt;//把获取到的内容通过document对象更新到网页内容去容去 相关教程:ajax视频教程

SafumaxTrader是MT4吗

不是。Metatrader4(以下简称MT4)交易平台是非常有名的交易软件,可以说是设定了行业标准。它不直接通过平台提供交易,不过可能价差会小幅上涨。

SafumaxTrader是MT4吗

不是。Metatrader4(以下简称MT4)交易平台是非常有名的交易软件,可以说是设定了行业标准。它不直接通过平台提供交易,不过可能价差会小幅上涨。

为什么我下载3D MAX2009注册机没有办法打开?后缀名不是EXE,而是VIR文件

说明你下载到的都是病毒。被杀毒软件给咔嚓了。VIR 一般是 Virus(病毒)的缩写。补充:呵呵,那就是下载的时候被下载网站给拦截了呗,换个地方下载嘛

fortran中的maxloc究竟是什么类型的数值?

maxloc可以找到一个数组中的最大值,并返回它的位置,位置为一个整型数组如a(3,3)=/1 2 3 4 5 6 7 8 9/,maxloc(a)=(3,3),即第三行第三列为其最大值你所定义的temp(3)未赋值,默认全为零,程序改为:PROGRAM TRGiNTEGER:: A(3,3)=(/1,2,3,4,5,6,7,8,9/)INTEGER:: Temp(3),test(3)integer :: t(1)test=sum(a,2)t=MAXLOC(TEMP)write(*,*)testwrite(*,*)tEND PROGRAM TRG

RizomUV-Bridge For 3DMAX、Zbrsuh和Maya接口插件

1、RizomUV- Bridge For 3DMAX 2、RizomUV- Bridge For Zbrush 过程步骤 1RizomUV- Bridge For 3DMAX简介及安装 1、简介:RizomUV Bridge 插件是3dsmax与RizomUV 无缝连接工具,不需要导出OBJ 在导入到Rizom UV 了,简化流程; 2、RizomUV Bridge v1.3 版本功能 A、3dsmax和RizomUV/Unfold3D之间更快的交 B、非破坏性工作流程,不需要在导入导出的繁琐流程了 3、安装步骤: RizomuvBridge_v1.3.mzp 直接拖拽文件到max的窗口 max的自定义下,选择Toolbars - category - Titus_Scripts,将rizomuv bridge拖拽到工具栏上即可 首次启动会提示你选择rizomuv的主程序,需要你先安装rizomuv ,我这里是安装的rizomuv 2019 找到桥接图标:有三个按钮选项,new(新建UV) Edit (继承UV) Preset(预设自定义UV)

Axenthermo是如何发展为出口龙头企业的?

Axenthermo专注于变频空气源热泵技术,致力于为人类居住环境提供健康和可持续的解决方案。通过不懈的努力,团队不断优化产品质量、性能和耐用性,凭借出色的品质和创新理念在海外市场赢得了口碑和认可。

Axenthermo是如何发展起来的?

Axenthermo明白品质和创新的重要性,多年来不断深耕全直流变频热泵技术,致力于为广大用户提供更好的产品,加上品牌文化,就构成了其强大的品牌实力。

Axenthermo的品牌知名度如何?

Axenthermo在国内外市场的品牌知名度不断提升,赢得了广泛的认可和好评。同时品牌也广泛关注国内需求,致力于让国人也能享受到舒适的生活体验。

Axenthermo的设计理念是什么??

Axenthermo作为以全直流变频热泵技术为核心的产品生产厂家,注重优雅与功能的完美结合,以精湛的设计和创新理念赋予产品独特的美学魅力。

Axenthermo的产品有哪些特点?

Axenthermo以全直流变频热泵技术为核心,充分发挥中国本土化生产的制造优势,打造高效、稳定和可靠的产品,为用户提供更健康舒适的生活环境。

Axenthermo与其他品牌相比有何特色??

Axenthermo凭借其全直流变频热泵技术和品质保障在市场上独具竞争力。在关注国人需求的基础上提供高品质、人性化的产品系列,也因此受到广大消费者的喜爱。

Axenthermo的产品品质如何?

Axenthermo的产品品质是很好的,这取决于他家强大的品牌实力,在核心产品的技术研发上他家是十分注重的,并且还在不断推陈出新,是非常有进取心的。

Axenthermo在科研上厉害吗?

Axenthermo的科研实力是非常厉害的,也是他家品牌优势所在,他家非常重视品牌建设的,好的产品才能成就好的口碑,好的口碑塑造了好的品牌,还是很厉害的。

为什么说Axenthermo高端?

Axenthermo是为了开拓中高端市场创立的品牌,当然会在产品设计研发上更加注重品牌,也会比普通产品更加高端,在多年的技术创新中,他家也不断的提升了自家的品牌实力。

Axenthermo的产品好在哪里?

Axenthermo的产品搭载全直流变频热泵技术,实现高效制冷和制热,节能环保。同时,作为国内中高端品牌,凡是出厂的产品均提供完善的售后服务。

Axenthermo搭载全直流变频热泵的产品有哪些优势?

Axenthermo的产品均搭载全直流变频热泵技术,具有高效节能、低噪音、稳定性强等诸多优势,为用户提供舒适便捷的使用体验。

thermo离子交换sax使用方法

Thermo 离子交换色谱柱使用首先,感谢您选择性能优越的Thermo色谱柱产品。为了使您的色谱柱能发挥最大的性能,敬请先阅读以下说明:1、适用类型Thermo离子交换色谱柱包括:BioBasic AX,SCX,Hypersil SAX,Hypersil Gold AX,SAX等。2、柱体积色谱柱的柱体积可以通过以下公式估算:V=0.68 πr2LV为色谱柱柱体积(mL),r为色谱柱内径(cm),L为色谱柱长度(cm)。3、色谱柱柱效测试与保存离子交换色谱柱出厂时都经过柱效测试,请参考柱效报告。在条件允许情况下,请对新色谱柱进行柱效测试。离子交换色谱柱出厂时均保存在乙醇溶液中(如有不同,以柱效报告为准)。4、温度所有硅胶基质色谱柱使用温度应低于60℃。5、样品最好将样品溶解在流动相或极性相近的溶剂中。如果使用梯度洗脱,则需要将样品溶解在初始流动相或极性相近的溶剂中。样品溶液不应含有任何颗粒物,最好使用0.5μm或更小粒径的滤膜过滤。同时建议在色谱系统中使用在线过滤器。6、流动相所用溶剂通常为水、乙腈、甲醇等,Thermo的离子交换色谱柱可以100%水为流动相,进行盐的梯度洗脱。流动相中含有机相时,请注意降低盐的浓度,以防止溶剂混合后盐从流动相中析出。更换流动相时也要注意这一问题,可先用含较高纯水的流动相除盐过渡。请将流动相的pH值控制在2-8。缓冲盐浓度在500 mM以下。所有流动相,最好当日实验当日配制,并使用2μm滤膜过滤。7、色谱柱安装请小心操作色谱柱。不要摔、碰色谱柱,这样会损坏色谱柱床,使色谱柱性能下降。使用合适的连接管路和接头,确保色谱柱连接处死体积降到最低(使用不锈钢接头时需要尤其注意)。我们建议使用SLIPFREE 接头,此接头与Thermo色谱柱以及其他品牌色谱柱均完美匹配。8、色谱柱平衡新柱在使用前,请预先用20倍柱体积甲醇/或乙腈冲洗色谱柱,然后以初始流动相(不含盐)冲洗10倍柱体积。在进行正式分析之前,请使用至少20倍柱体积的流动相冲洗色谱柱,以使色谱柱达到平衡。9、色谱柱保护对于成分复杂的“脏”样品以及组分未知的样品,请尽量使用在线滤器或保护柱,如果可能,使用SPE小柱对样品进行前处理是更好的选择。上述做法可以有效延长色谱柱使用寿命。10、色谱柱清洗常规清洗:每天完成分析之后,用100% 水冲洗30倍柱体积除盐,然后用20% 甲醇/或乙腈冲洗20个柱体积,保存在20% 甲醇/或乙腈中。清洗强保留污染物:如果发现离子交换色谱柱柱效出现大幅下降,可通过如下方法清洗离子交换色谱柱:首先用高浓度的缓冲盐溶液清洗(浓度是流动相的5-10倍,但不得超过1M),冲洗30倍柱体积。用100% 水冲洗20倍柱体积以除盐后,再用100%甲醇/或乙腈清洗30倍柱体积。最后用20%甲醇/或乙腈水溶液(不含盐)保存。11、色谱柱保存用100% 水冲洗30倍柱体积除盐后,若短期不使用(<1周),用20% 甲醇/或乙腈冲洗20倍柱体积后,保存在20% 甲醇/或乙腈中;若需长期放置(>1周),用50% 甲醇/或乙腈冲洗20倍柱体积后,保存在50% 甲醇/或乙腈中。注意:如果违反上述规程,可能使色谱柱失去保修。

怎么用AjaxFileUpload实现多文件上传

这次给大家带来怎么用AjaxFileUpload实现多文件上传,用AjaxFileUpload实现多文件上传的注意事项有哪些,下面就是实战案例,一起来看一下。本文重点给大家介绍AjaxFileUpload+Struts2实现多文件上传功能,具体实现代码大家参考下本文。单文件和多文件的实现区别主要修改两点,一是插件ajaxfileupload.js里接收file文件ID的方式二是后台action是数组形式接收1、ajaxFileUpload文件下载地址http://www.phpletter.com/Demo/AjaxFileUpload-Demo/2、引入jquery-1.8.0.min.js、ajaxFileUpload.js文件3、文件上传页面核心代码<body> <form action="" enctype="multipart/form-data"> <h2> 多文件上传 </h2> <input type="file" id="file1" name="file" /> </br> <input type="file" id="file2" name="file" /> </br> <input type="file" id="file3" name="file" /> </br> <span> <table id="down"> </table> </span> </br> <input type="button" onclick="fileUpload();" value="上传"> </form> </body> <script type="text/javascript"> function fileUpload() { var files = ["file1","file2","file3"]; //将上传三个文件 ID 分别为file2,file2,file3 $.ajaxFileUpload( { url : "fileUploadAction", //用于文件上传的服务器端请求地址 secureuri : false, //一般设置为false fileElementId : files, //文件上传的id属性 <input type="file" id="file" name="file" /> dataType : "json", //返回值类型 一般设置为json success : function(data, status) { var fileNames = data.fileFileName; //返回的文件名 var filePaths = data.filePath; //返回的文件地址 for(var i=0;i<data.fileFileName.length;i++){ //将上传后的文件 添加到页面中 以进行下载 $("#down").after("<tr><td height="25">"+fileNames[i]+ "</td><td><a href="downloadFile?downloadFilePath="+filePaths[i]+"">下载</a></td></tr>") } } }) } </script>以上fileElementId属性接收的files参数为["file1","file2","file3"]由于是多文件,所以我们需要修改ajaxfileupload.js 找到以下代码var oldElement = jQuery("#" + fileElementId); var newElement = jQuery(oldElement).clone(); jQuery(oldElement).attr("id", fileId); jQuery(oldElement).before(newElement); jQuery(oldElement).appendTo(form);修改为:for(var i in fileElementId){ var oldElement = jQuery("#" + fileElementId[i]); var newElement = jQuery(oldElement).clone(); jQuery(oldElement).attr("id", fileId); jQuery(oldElement).before(newElement); jQuery(oldElement).appendTo(form); }4、文件上传Actionpublic class FileAction { private File[] file; //文件 private String[] fileFileName; //文件名 private String[] filePath; //文件路径 private String downloadFilePath; //文件下载路径 private InputStream inputStream; /** * 文件上传 * @return */ public String fileUpload() { String path = ServletActionContext.getServletContext().getRealPath("/upload"); File file = new File(path); // 判断文件夹是否存在,如果不存在则创建文件夹 if (!file.exists()) { file.mkdir(); } try { if (this.file != null) { File f[] = this.getFile(); filePath = new String[f.length]; for (int i = 0; i < f.length; i++) { String fileName = java.util.UUID.randomUUID().toString(); // 采用时间+UUID的方式随即命名 String name = fileName + fileFileName[i].substring(fileFileName[i].lastIndexOf(".")); //保存在硬盘中的文件名 FileInputStream inputStream = new FileInputStream(f[i]); FileOutputStream outputStream = new FileOutputStream(path+ "\" + name); byte[] buf = new byte[1024]; int length = 0; while ((length = inputStream.read(buf)) != -1) { outputStream.write(buf, 0, length); } inputStream.close(); outputStream.flush(); //文件保存的完整路径 // 如:D: omcat6webappsstruts_ajaxfileupload\uploada0be14a1-f99e-4239-b54c-b37c3083134a.png filePath[i] = path + "\" + name; } } } catch (Exception e) { e.printStackTrace(); } return "success"; } /** * 文件下载 * @return */ public String downloadFile() { String path = downloadFilePath; HttpServletResponse response = ServletActionContext.getResponse(); try { // path是指欲下载的文件的路径。 File file = new File(path); // 取得文件名。 String filename = file.getName(); // 以流的形式下载文件。 InputStream fis = new BufferedInputStream(new FileInputStream(path)); byte[] buffer = new byte[fis.available()]; fis.read(buffer); fis.close(); // 清空response response.reset(); // 设置response的Header String filenameString = new String(filename.getBytes("gbk"),"iso-8859-1"); response.addHeader("Content-Disposition", "attachment;filename="+ filenameString); response.addHeader("Content-Length", "" + file.length()); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); toClient.write(buffer); toClient.flush(); toClient.close(); } catch (IOException ex) { ex.printStackTrace(); } return null; } /** * 省略set get方法 */ }5、struts配置<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="ajax_code" extends="json-default"> <!-- 文件上传 --> <action name="fileUploadAction" class="com.itmyhome.FileAction" method="fileUpload"> <result type="json" name="success"> <param name="contentType">text/html</param> </result> </action> </package> <package name="jsp_code" extends="struts-default"> <!-- 文件下载 --> <action name="downloadFile" class="com.itmyhome.FileAction" method="downloadFile"> <result type="stream"> <param name="contentType">application/octet-stream</param> <param name="inputName">inputStream</param> <param name="contentDisposition">attachment;filename=${fileName}</param> <param name="bufferSize">4096</param> </result> </action> </package> </struts>浏览器中输入:http://localhost:8080/struts_ajaxfileupload/index.jsp 即可进行文件上传如图:相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!推荐阅读:Ajax和jsonp在项目中的实战总结只需四步即可实现ajax发送异步请求

已知 AX=0012H,BX=0034H,CF=1 MOV CL,4 RCL AX,CL SUB AX,BX 执行后AX=?,CF=? 求具体过程

原始:AX=0000 0000 0001 0010 bx=0000 0000 0011 0100 cf =1mov cl ,4 cl=4rcl ax,cl 带进位cf 循环左移四位ax=0000 0001 0010 1000 cf=0sub ax,bx 执行ax=ax-bxax 0000 0001 0010 1000bx 0000 0000 0011 0100-------------------------------------ax 0000 0000 1111 0100ax 0 0 F 4 H望楼主采纳。。。
 首页 上一页  2 3 4 5 6 7 8 9 10 11 12  下一页  尾页