jQuery调用AJAX异步操作超清晰教程
- 格式:doc
- 大小:1009.75 KB
- 文档页数:27
JQueryAjax使⽤SpringMVC中MultipartFile进⾏⽂件上传对于⼀个带有⽂件上传的表单,后台使⽤springMVC封装的MultipartFile file接收⽂件,并且需要使⽤异步提交,并返回相应的提⽰信息使⽤JQUERY的form插件,即jquery.form.js这个插件,然后使⽤插件的ajaxSubmit⽅法;代码如下1 $("#pageForm").ajaxSubmit({2 type: "POST",3 url:"你的action.html",4 dataType: "json",5 success: function(data){6if(data.msg=='SUCCESS'){7 alert(success);8 }9else{10 alert(data.msg);11 }12 }13 });1 @RequestMapping("/insertGoodsBrand")2public void insertGoodsBrand(3 HttpServletRequest request,4 @RequestParam(value = "file", required = false) MultipartFile file,HttpServletResponse response,5 GoodsBrand goodsBrand){6 JSONObject obj = new JSONObject();7 PrintWriter out = null;8try {9 out = response.getWriter();10 String path = request.getSession().getServletContext().getRealPath(11 "upload\\goods\\brand");12 String fileName = file.getOriginalFilename();13 String saveFileName = Common.getNowCorrect2Second() + "."14 + fileName.substring(stIndexOf(".") + 1);15 File targetFile = new File(path, saveFileName);16if (!targetFile.exists()) {17 targetFile.mkdirs();18 }19 String msg = "";20 file.transferTo(targetFile);21 msg = backGoodsBrandBus.insertGoodsBrand(goodsBrand, saveFileName);22if (msg.equals("SUCCESS")) {23 obj.put("msg", msg);24 } else {25 obj.put("msg", msg);26 }27 out.print(obj);28 } catch (Exception e) {29 e.printStackTrace();30 }31finally{32 out.close();33 }34 }。
layui中ajax的用法Layui是一款轻量级的前端UI框架,它以简洁、易用的设计风格受到广泛关注。
在Layui中,ajax是一种常用的数据交互方式,它可以让网页与后端服务器进行通信,获取或提交数据。
本文将详细介绍Layui中ajax的用法。
一、ajax概述ajax的全称是AsynchronousJavaScriptandXML(异步的JavaScript和XML),它是一种使用JavaScript和XML来与服务器进行通信的技术。
通过ajax,网页可以异步地向服务器请求数据,并在不刷新页面的情况下更新网页的内容。
这种技术可以大大提高网页的交互性和用户体验。
在Layui中,ajax的使用方法与其他JavaScript框架类似,主要包括以下步骤:1.引入Layui的ajax模块首先,需要在HTML文件中引入Layui的ajax模块,以便可以使用其中的功能。
可以在HTML文件的头部引入以下代码:<scriptsrc="/path/to/layui/layui.js"></script>2.创建ajax请求使用Layui的ajax模块,可以很方便地创建ajax请求。
可以使用以下代码创建一个GET请求:e('ajax',function(){varajax=layui.ajax;ajax.get({url:'/path/to/api',//后端服务器的API地址{//发送给服务器的数据key1:value1,key2:value2},success:function(response){//请求成功的回调函数console.log(response);//打印服务器的响应数据},error:function(error){//请求失败的回调函数console.log(error);//打印错误信息}});});3.处理服务器响应当ajax请求成功时,服务器会返回响应数据。
ajax中的success方法1.引言1.1 概述概述:AJAX(Asynchronous JavaScript and XML)是一种基于前端的技术,通过使用JavaScript和XML或JSON来实现与服务器之间的异步通信。
它的出现极大地改变了Web开发的方式,使得页面能够实现动态的数据更新,无需重新加载整个页面。
在AJAX中,success方法是作为回调函数之一,用于处理异步请求成功后返回的数据。
当请求成功时,success方法会被调用,并将服务器返回的数据作为参数传递给该方法。
本文将重点介绍和探讨AJAX中的success方法,包括其使用方法、参数和常见的应用场景。
通过深入了解success方法,读者将能够更好地理解AJAX的工作原理,并能够灵活运用这一方法来处理异步请求的返回数据。
接下来的章节将依次介绍AJAX的简介以及其中的success方法,以帮助读者更好地理解和运用该方法。
本文的目的是帮助读者掌握AJAX技术中的关键概念和方法,以便能够在实际的Web开发中灵活运用AJAX 来提升用户体验和页面的性能。
在结论部分,我们将对AJAX中的success方法进行总结,并展望其在未来的应用前景。
通过对success方法的深入学习,读者将能够更好地应用这一方法来处理异步请求返回的数据,提供更好的用户体验,同时也能够更好地理解和应用AJAX技术。
1.2文章结构文章结构是指文章的组织形式和内容安排方式。
一个良好的文章结构可以使读者更容易理解和吸收文章内容,并且可以让作者更清晰地表达自己的观点和论据。
在本篇文章中,我们将按照以下结构组织内容:1. 引言1.1 概述:介绍AJAX(Asynchronous JavaScript and XML)的基本概念和作用,以及它在现代Web开发中的重要性。
1.2 文章结构:说明本篇文章的整体结构和内容安排。
1.3 目的:阐述写作本文的目的,即介绍AJAX中的success方法的作用、用法和实际应用场景。
写法一:使用error回调函数处理AJAX请求错误1. error回调函数是在AJAX请求发生错误时被调用的函数,可以用来处理各种类型的错误,例如网络错误、服务器错误、超时等。
2. error回调函数的基本语法如下:```$.ajax({url: 'example.php',success: function(data) {// 处理请求成功的逻辑},error: function(xhr, status, error) {// 处理请求发生错误的逻辑}});```上述代码中,error回调函数接受三个参数:xhr(XMLHttpRequest 对象)、status(错误状态)和error(错误信息),我们可以根据这些参数来定制我们的错误处理逻辑。
3. xhr参数包含了有关发生错误的请求和响应的信息,我们可以通过xhr对象的属性来获取这些信息,例如status、statusText、responseText等。
4. status参数是一个字符串,表示发生的错误的类型,常见的值有"error"、"timeout"、"abort"等。
5. error参数是一个字符串,表示发生错误时的具体信息,例如"Internal Server Error"、"Not Found"等。
6. 我们可以根据status和error参数的值,来判断发生的错误类型,并作出相应的处理,例如显示错误提示、重新发送请求、跳转到错误页面等。
写法二:使用$.ajaxSetup全局设置处理AJAX请求错误1. $.ajaxSetup是jQuery提供的一个全局AJAX设置函数,可以用来设置全局的AJAX默认值,包括设置全局的AJAX错误处理函数。
2. 我们可以使用$.ajaxSetup来设置全局的error回调函数,以处理所有AJAX请求的错误。
ajax的20个参数AJAX的原理,使⽤,深⼊了解AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)⼀,ajax参数1.url:要求为String类型的参数,(默认为当前页地址)发送请求的地址。
2.type:要求为String类型的参数,请求⽅式(post或get)默认为get。
注意其他http请求⽅法,例如put和delete也可以使⽤,但仅部分浏览器⽀持。
3.timeout:要求为Number类型的参数,设置请求超时时间(毫秒)。
此设置将覆盖$.ajaxSetup()⽅法的全局设置。
4.async:要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。
如果需要发送同步请求,请将此选项设置为false。
注意,同步请求将锁住浏览器,⽤户其他操作必须等待请求完成才可以执⾏。
5.cache:要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false),设置为false将不会从浏览器缓存中加载请求信息。
6.data:要求为Object或String类型的参数,发送到服务器的数据。
如果已经不是字符串,将⾃动转换为字符串格式。
get请求中将附加在url后。
防⽌这种⾃动转换,可以查看 processData选项。
对象必须为key/value格式,例如{foo1:"bar1",foo2:"bar2"}转换为&foo1=bar1&foo2=bar2。
如果是数组,JQuery将⾃动为不同值对应同⼀个名称。
例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2。
7.dataType:要求为String类型的参数,预期服务器返回的数据类型。
如果不指定,JQuery将⾃动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。
ajax的流程随着互联网的发展,网页的交互性越来越重要,而Ajax技术的出现为实现网页的动态效果提供了很好的解决方案。
本文将介绍Ajax 的流程,包括Ajax的定义、工作原理、流程以及应用场景等。
一、Ajax的定义Ajax全称Asynchronous JavaScript and XML,即异步JavaScript 和XML。
它是一种用于在Web应用程序中创建交互式用户界面的技术,可以在不重新加载整个页面的情况下更新页面的部分内容。
Ajax技术的出现使得用户可以更加快速、方便地获取页面内容,提高了用户体验。
二、Ajax的工作原理Ajax技术的核心是JavaScript和XML。
JavaScript可以通过XMLHttpRequest对象向服务器发送请求,服务器将数据以XML格式返回给客户端,JavaScript再通过DOM操作将数据更新到页面上。
由于Ajax是异步的,也就是说,当JavaScript向服务器发送请求时,它不会停止页面的其他操作,而是在后台进行请求和数据处理,从而实现了页面的动态效果。
三、Ajax的流程1. 创建XMLHttpRequest对象在使用Ajax技术之前,需要先创建XMLHttpRequest对象。
XMLHttpRequest对象是JavaScript内置的对象,用于向服务器发送请求和接收响应。
2. 发送请求当XMLHttpRequest对象创建完成后,可以通过open()和send()方法向服务器发送请求。
其中,open()方法用于设置请求的类型、URL 和是否异步等信息,而send()方法用于发送请求。
3. 接收响应当服务器接收到请求后,会根据请求的类型和URL返回数据。
在客户端,XMLHttpRequest对象会监听服务器的响应,并通过onreadystatechange事件来处理响应。
当服务器返回响应时,XMLHttpRequest对象会触发onreadystatechange事件,开发者可以通过该事件来获取服务器返回的数据。
jqueryajax调⽤springboot接⼝发送json数据⽰例,兼容跨域调⽤,解决m。
本⽂主要解决三个问题:1.解决maven项⽬中引⽤本地lib⽬录的jar包时打包失败的问题2.解决spring boot开发的微服务接⼝中的跨域问题3.ajax 发送json数据的问题昨天研究 office 外接程序开发时,发现在插件中调⽤后台由 Spring boot 开发的接⼝并传递json时总是失败,调试了半天,尝试了$.ajax,$.post等⽅法服务端均⽆法获取到正确的请求,发送到后端的请求的格式是application/www-urlencode,⽽后端接受的是application/json格式的数据,由于⽤postman测试接⼝可以正常返回,应该可以说明后台接⼝没有问题。
1.解决maven项⽬中引⽤本地lib⽬录的jar包时打包失败的问题其实在⼀开始编写后台接⼝时,也遇到了⼀些问题,因为接⼝中引⽤了⼀个项⽬本地的lib⽬录中的jar包,⽽这个jar包并未⽤maven管理,所以调试和打包上遇到了⼀些问题,以前使⽤mvn clean install就可以完成的动作,现在⼀直报错,在pom中这样修改就可以解决了:<build><!-- 加上下⾯的,mvn命令会报错,现在直接调试完毕后,mvn package即可--><resources><resource><directory>lib</directory><targetPath>/BOOT-INF/lib/</targetPath><includes><include>**/*.jar</include></includes></resource></resources><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><skip>true</skip></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skip>true</skip></configuration></plugin></plugins></build>2.解决spring boot开发的微服务接⼝中的跨域问题由于服务端⽇志中⼀直观察不到ajax调⽤的正确请求,于是祭出终极⼤杀器——抓包,打开WireShark,选择对应的⽹卡,参数设置成:ip.dst_host== 你接⼝服务器的ip && tcp.dstport ==你接⼝服务监听的端⼝抓包后发现,第⼀个HTTP请求竟然不是POST,⽽是OPTIONS:这不是我嘞个⼤擦了么…… ⽴马拿出万能钥匙——⾕歌搜索引擎开始解决问题,输⼊关键字“http options request”,看到第⼀条就应该是我要的答案了:沿着指路明灯给出的航向继续前进():OPTIONSThe HTTP OPTIONS method requests permitted communication options for a given URL or server. A client can specify a URL with thismethod, or an asterisk (*) to refer to the entire server.继续往下翻,看到了这段⽂字:In , a is sent with the OPTIONS method so that the server can respond if it is acceptable to send the request. In this example, we will request permission for these parameters:The header sent in the preflight request tells the server that when the actual request is sent, it will have a request method.The header tells the server that when the actual request is sent, it will have the X-PINGOTHER and Content-Type headers.我恍然⼤悟,原来是跨域调⽤的问题。
jQuery中的Deferred-详解和使⽤⾸先,为什么要使⽤Deferred?先来看⼀段AJAX的代码:1var data;2 $.get('api/data', function(resp) {3 data = resp.data;4 });5 doSomethingFancyWithData(data);View Code这段代码极容易出问题,请求时间多长或者超时,将会导致我们获取不到data。
只有把请求设置为同步我们才能够等待获取到data,才执⾏我们的函数。
但是这会带来阻塞,导致⽤户界⾯⼀直被冻结,对⽤户体验有很严重的影响。
所以我们需要使⽤异步编程,JS的异步编程有两种⽅式基于事件和基于回调,传统的异步编程会带来的⼀些问题,1.序列化异步操作导致的问题: 1),延续传递风格Continuation Passing Style (CPS)2),深度嵌套3),回调地狱2.并⾏异步操作的困难下⾯是⼀段序列化异步操作的代码:1// Demonstrates nesting, CPS, 'callback hell'2 $.get('api1/data', function(resp1) {3// Next that depended on the first response.4 $.get('api2/data', function(resp2) {5// Next request that depended on the second response.6 $.get('api3/data', function(resp3) {7// Next request that depended on the third response.8 $.get(); // ... you get the idea.9 });10 });11 });View Code当回调越来越多,嵌套越深,代码可读性就会越来越差。
AJAX的callback用法概述A J AX(A sy nc hr on ou s Ja va Sc ri pt an dXM L)是一种用于创建无需刷新整个页面的异步请求的技术。
通过A JAX,可以实现与服务器进行数据交换而不需要刷新页面,提高用户体验和页面性能。
其中,ca l lb ac k函数在AJ AX请求完成后执行,用于处理服务器返回的数据。
什么是call back函数在J av aS cr ip t中,c a ll ba ck函数是一种作为参数传递给其他函数并在特定事件或条件发生时执行的函数。
在A JA X中,c al lb ac k函数通常用于处理响应数据,例如更新前端界面或处理返回的数据。
使用AJA X进行请求f u nc ti on ge tD at a(){v a rx hr=n ew XM LH ttp R eq ue st();x h r.op en("GE T","u r l",t ru e);x h r.on re ad ys ta tec h an ge=f un ct io n(){i f(x hr.r ea dy St ate===4&&x hr.s ta tus===200){v a rd at a=JS ON.p ars e(x hr.r es po ns eTe x t);c a ll ba ck(d at a);}};x h r.se nd();}f u nc ti on ca ll ba ck(d at a){//处理响应数据的逻辑}上述代码展示了使用A JA X进行G E T请求的基本模板。
当请求状态(`xh r.re ad yS ta te`)为4且响应状态(`x hr.s ta tu s`)为200时,即请求成功,通过`J SO N.p ar se()`方法将返回的JS ON数据解析为J a va Sc ri pt对象,并将其作为参数传递给c al lb ac k函数进行处理。
ajax请求的例子Ajax(Asynchronous JavaScript and XML)是一种用于创建交互式网页应用的技术。
它通过在后台与服务器进行数据交换,实现页面的异步更新,避免了页面的重新加载,提高了用户体验。
下面将为大家介绍一些使用Ajax进行数据请求的例子。
例子一:获取用户信息假设我们有一个网页,需要获取用户的姓名和年龄。
我们可以使用Ajax发送请求,将用户信息发送给服务器,并在页面上显示出来。
以下是使用jQuery库实现的示例代码:```javascript$.ajax({url: "/user",type: "GET",dataType: "json",success: function(response) {var name = ;var age = response.age;$("#name").text(name);$("#age").text(age);}});例子二:搜索功能假设我们有一个搜索框,用户可以在其中输入关键词,并实时获取相关的搜索结果。
以下是一个使用Ajax实现的搜索功能的示例代码:```javascript$("#search-input").on("input", function() {var keyword = $(this).val();$.ajax({url: "/search",type: "GET",data: { keyword: keyword },dataType: "json",success: function(response) {var results = response.results;$("#search-results").empty();for (var i = 0; i < results.length; i++) {$("#search-results").append("<li>" + results[i] + "</li>");}}});});例子三:加载更多内容假设我们有一个新闻网站,页面上只显示了部分新闻内容,用户可以点击“加载更多”按钮来获取更多的新闻。
ajax.then 用法
ajax.then 是用来处理Promise 的,它接受两个参数:第一个参数是成功的回调函数,第二个参数是失败的回调函数。
下面是一个简单的例子:
javascript
$.ajax({
url: 'some_url',
type: 'GET',
success: function(data) {
console.log('Success:', data);
}
}).then(function(data) {
console.log('Success again:', data);
}, function(error) {
console.log('Error:', error);
});
在上面的例子中:
1.当AJAX 请求成功时,我们首先执行内部的success 回调,然后是外部的.then 的
第一个回调。
2.如果AJAX 请求失败,则首先执行内部的error 回调(如果提供了的话),然后是外
部的.then 的第二个回调。
需要注意的是,.then 返回的也是一个Promise,这意味着你可以链式调用多个.then 方法。
还有一点要注意的是,从jQuery 3.0 开始,.done、.fail、.always 等方法已经被弃用,建议使用.then 来代替。
所以,在现代的jQuery 或原生JavaScript 中,你更可能会看到.then 的使用。
浅谈JQUREY(摘自/softwave/article/details/2070815)JQUERY手册(第七页,附教程)Jquery是继prototype之后又一个优秀的Javascript框架。
对prototype我使用不多,简单了解过。
但使用上jquery 之后,马上被她的优雅吸引住了。
有人使用这样的一比喻来比较prototype和jquery:prototype就像Java,而jquery 就像ruby.实际上我比较喜欢java(少接触Ruby罢了)但是jquery的简单的实用的确有相当大的吸引力啊!在项目里我把jquery作为自已唯一的框架类包。
使用其间也有一点点心得,其实这些心得,在jquery的文档上面也可能有讲,不过还是记下来,以备忘罢。
一,找到你了!还记得$()这个东西吧?prototype还是DWR都使用了这个函数代替document.getElementById()。
没错,jquery也跟风了。
为达到document.getElementById()的目的,jquery是这样写的:Java代码1.var someElement = $("#myId");[java]view plaincopyprint?1.var someElement = $("#myId");看起来比其他两个框架的要多了一个#,好,看看下面的用法:Java代码1.$("div p");(1)2.$("div.container")(2)3.$("div #msg");(3)4.$("table a",context);(4)[java]view plaincopyprint?1.$("div p");(1) $("div.container")(2) $("div #msg");(3) $("table a",context);(4)在prototype里看过这样的写法吗?第一行代码得到所有<div>标签下的<p>元素。
ajax中的async属性值之同步和异步及同步和异步区别jquery中ajax⽅法有个属性async⽤于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项⽬中会⽤到AJAX同步。
这个同步的意思是当JS代码加载到当前AJAX的时候会把页⾯⾥所有的代码停⽌加载,页⾯出现假死状态,当这个AJAX 执⾏完毕后才会继续运⾏其他代码页⾯假死状态解除。
⽽异步则这个AJAX代码运⾏中的时候其他代码⼀样可以运⾏。
ajax中async这个属性,⽤于控制请求数据的⽅式,默认是true,即默认以异步的⽅式请求数据。
⼀、async值为true (异步)当ajax发送请求后,在等待server端返回的这个过程中,前台会继续执⾏ajax块后⾯的脚本,直到server端返回正确的结果才会去执⾏success,也就是说这时候执⾏的是两个线程,ajax块发出请求后⼀个线程和ajax块后⾯的脚本(另⼀个线程)例如$.ajax({type:"POST",url:"Venue.aspx?act=init",dataType:"html",success:function(result){ //function1()f1();f2();}failure:function (result) {alert('Failed');},}function2();在上例中,当ajax块发出请求后,他将停留function1(),等待server端的返回,但同时(在这个等待过程中),前台会去执⾏function2()。
⼆、async值为false (同步)当执⾏当前AJAX的时候会停⽌执⾏后⾯的JS代码,直到AJAX执⾏完毕后时,才能继续执⾏后⾯的JS代码。
例如$.ajax({type:"POST",url:"Venue.aspx?act=init",dataType:"html",async: false,success:function(result){ //function1()f1();f2();}failure:function (result) {alert('Failed');},}function2();当把asyn设为false时,这时ajax的请求时同步的,也就是说,这个时候ajax块发出请求后,他会等待在function1()这个地⽅,不会去执⾏function2(),直到function1()部分执⾏完毕。
JQUERY AJAX异步操作详细说明AJAX 全称 Asynchronous JavaScript and XML(异步的 JavaScript 和XML)。
它并非一种新的技术,而是以下几种原有技术的结合体。
1)使用CSS和XHTML来表示。
2)使用DOM模型来交互和动态显示。
3)使用XMLHttpRequest来和服务器进行异步通信。
4)使用javascript来绑定和调用。
通过AJAX异步技术,可以在客户端脚本与web服务器交互数据的过程中使用XMLHttpRequest对象来完成HTTP请求(Request)/应答(Response)模型:1)不需要用户等待服务端响应。
在异步派发XMLHttpRequest请求后控制权马上就被返回到浏览器。
界面不会出现白板,在得到服务器响应之前还可以友好的给出一个加载提示。
2)不需要重新加载整个页面。
为XMLHttpRequest注册一个回调函数,待服务器响应到达时,触发回调函数,并且传递所需的少量数据。
“按需取数据”也降低了服务器的压力。
3)不需要使用隐藏或内嵌的框架。
在XHR对象之前,模拟Ajax通信通常使用hack手段,如使用隐藏的或内嵌的框架(<iframe>标签)。
下面介绍下AJAX中的重要对象:XMLHttpRequest。
XMLHttpRequest对象(XHR)XMLHttpRequest是一套可以在Javascript、VbScript、Jscript等脚本语言中通过http协议传送或接收XML及其他数据的一套API。
XMLHttpRequest对象首次以ActiveX对象形式在微软Internet Explorer(IE) 5中以引入。
其他浏览器制造商在认识到这一对象重要性后也纷纷实现了XMLHttpRequest对象,但是以一个本地JavaScript对象而不是作为一个ActiveX 对象实现。
而如今,由于安全性、标准等问题,微软已经在其IE 7中把XMLHttpRequest实现为一个本地JavaScript对象。
API描述客服端请求open(method,url,a sync, bstrUser, bstrPassword)规定请求的类型、URL 以及是否异步处理请求。
1)method:请求的类型,例如:POST、GET、PUT及PROPFIND。
大小写不敏感。
2)url:请求的URL地址,可以为绝对地址也可以为相对地址。
3)async[可选]:true(默认,异步)或 false(同步)。
注释:当您使用async=false 时,JavaScript 会等到服务器响应就绪才继续执行。
如果服务器繁忙或缓慢,应用程序会挂起或停止。
此时,不需要编写onreadystatechange回调函数,把代码放到send() 语句后面即可。
4)bstrUser[可选]:如果服务器需要验证,此处指定用户名,如果未指定,当服务器需要验证时,会弹出验证窗口。
5)bstrPassword[可选]:验证信息中的密码部分,如果用户名为空,则此值将被忽略。
getRequestHeader(name)获取指定的相应头部信息setRequestHeader( name,value)自定义HTTP头部信息。
需在open()方法之后和send()之前调用,才能成功发送请求头部信息。
传送门:HTTP 头部详解Accept浏览器能够处理的媒体类型Accept-Charset浏览器申明自己接收的字符集Accept-Encoding浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)Host客户端指定要请求的WEB服务器的域名/IP 地址和端口号Referer发出请求的页面的URIContent-Type标明发送或者接收的实体的MIME类型。
传送门:1、HTTP Content-type对照表2、格式:Content-Type:[type]/[subtype]; parameterX-Requested-With非标准HTTP头,只为firefox3标注是否为ajax异步请求,null表示为同步请求。
默认情况下,服务器对POST请求和提交Web表单不会一视同仁,将Content-Type头部信息设置为application/x-www-form-urlencoded (模拟表单提交)send(string)将请求发送到服务器。
参数string仅用于POST请求;对于GET请求的参数写在url后面,所以string参数传递null。
abort()调用此方法可取消异步请求,调用后,XHR对象停止触发事件,不允许访问任何与响应相关的属性;服务端响应onreadystatechang e事件对于异步请求,如果需要对服务器获取和操作响应结果,则在send() 之前,需要为onreadystatechange属性指定处理方法。
该函数用于对服务器响应进行处理。
readyState存有XMLHttpRequest的状态。
每当readyState改变时,就会触发onreadystatechange事件。
从 0 到 4 发生变化:0(未初始化)对象已建立,但是尚未初始化(尚未调用open方法)1(初始化)对象已建立,尚未调用send方法2(发送数据)send方法已调用,但是当前的状态及http头未知3(数据传送中)已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误4(完成)数据接收完毕,此时可以通过responseXml和responseText获取完整的回应数据status(数字表示)返回当前请求的http状态码。
传送门:HTTP状态码一览表(HTTP Status Code)1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码。
2xx (成功)表示成功处理了请求的状态代码。
Eg:2003xx (重定向)表示要完成请求,需要进一步操作。
通常,这些状态代码用来重定向。
Eg:3044xx(请求错误)这些状态代码表示请求可能出错,导致服务器无法正常处理。
Eg:4045xx(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。
这些错误可能是服务器本身的错误,而不是请求出错。
Eg:500statusText(字符表示)返回当前请求的状态文本eg:OK (status:200)responseText将响应信息作为字符串返回responseXML将响应信息格式化为Xml Document对象并返回responseBody(只有微软的IE支持)将响应信息正文以unsigned byte数组形式返回(二进制数据)responseStream(只有IE的某些版本支持)以Ado Stream对象(二进制流)的形式返回响应信息getResponseHeader(name)从响应信息中获取指定的http头getAllResponseHeaders()获取响应的所有http头overrideMimeType通常用于重写服务器响应的MIME类型。
Eg,正常情况下XMLHttpRequest只接收文本数据,但我们可以重写MIME为“text/plain; charset=x-user-defined”,以欺骗浏览器避免浏览器格式化服务器返回的数据,以实现接收二进制数据。
XMLHttpRequest Level 2XMLHttpRequest是一个浏览器接口,使得Javascript可以进行 HTTP (S) 通信。
但是,这个接口一直没有标准化,每家浏览器的实现或多或少有点不同。
HTML 5 的概念形成后,W3C 开始考虑标准化这个接口。
2008年 2 月,提出了XMLHttpRequest Level 2 草案。
1.老版本的缺点老版本的XMLHttpRequest对象有以下几个缺点:1)只支持文本数据的传送,无法用来读取和上传二进制文件。
2)传送和接收数据时,没有进度信息,只能提示有没有完成。
3)受到"同域限制"(Same Origin Policy),只能向同一域名的服务器请求数据。
2.新版本的功能新版本的XMLHttpRequest对象,针对老版本的缺点,做出了大幅改进。
1)可以设置 HTTP 请求的时限。
2)可以使用FormData对象管理表单数据。
3)可以上传文件。
4)可以请求不同域名下的数据(跨域资源共享,Cross-origin resourcesharing,简称 CORS)。
5)可以获取服务器端的二进制数据。
6)可以获得数据传输的进度信息。
3.介绍几个XMLHttpRequest Leve2 新增的成员超时时限timeout设置ajax请求超时时限,过了这个时限,就自动停止HTTP请求。
ontimeout事件当ajax超过timeout 时限时触发的回调函数。
指定响应格式responseType(默认:“text”)在发送请求前,根据您的数据需要,将xhr.responseType设置为“text”、“arraybuffer”、“blob”或“document”。
response成功发送请求后,xhr的响应属性会包含DOMString、ArrayBuffer、Blob 或Document 形式(具体取决于responseTyp的设置)的请求数据。
进度信息progress 事件在XMLHttpRequest对象传递数据的时候用来返回进度信息。
它分成上传和下载两种情况。
下载的 progress 事件属于XMLHttpRequest对象,上传的 progress 事件属于XMLHttpRequest.upload 对象。
即:xhr.onprogress = updateProgress;xhr.upload.onprogress = updateProgress;XHR 还新增了与progress 事件相关的五个事件:1) load 事件:传输成功完成。
2) abort 事件:传输被用户取消。
3) error 事件:传输中出现错误。
4) loadstart 事件:传输开始。
5) loadEnd 事件:传输结束,但是不知道成功还是失败。
4. 一个新功能实例1) 接收二进制数据(方法A :改写MIMEType )老版本的XMLHttpRequest 对象,只能从服务器取回文本数据。
但我们可以改写数据的MIMEType ,将服务器返回的二进制数据伪装成文本数据,并且告诉浏览器这是用户自定义的字符集。
关键代码如下:服务端?1 2 3 4 5 6 7 8 9 10 11String str ="二进制数据获取"; MemoryStream _memory =new MemoryStream(); BinaryFormatter formatter =new BinaryFormatter(); formatter.Serialize(_memory, str); _memory.Position = 0; byte [] read =new byte [_memory.Length]; _memory.Read(read, 0, read.Length); _memory.Close(); context.Response.ContentType ="text/plain"; // 服务器使用OutputStream 输出二进制流 context.Response.OutputStream.Write(read, 0, read.Length); 客服端?1 2 3 4 5 6 7 8 9 10 $('#btn_mime').bind('click',null,function () {$.ajax('AjaxHandler.ashx?func=GetBinaryData',{type:'get',dataType:'text',cache:false ,mimeType:'text/plain; charset=x-user-defined',success:function (data) {if (data) {var byte = [];1 1 12 13 14 15 16 17 18 19 2 0for (var i = 0, len = data.length; i < len; ++i) { var c = data.charCodeAt(i);byte[byte.length] = c & 0xff;}alert(byte);}}});});浏览器会把相应数据当做文本数据接收,所以我们还必须再一个个字节地还原成二进制数据。