jQuery中的Ajax几种请求方法
- 格式:doc
- 大小:145.00 KB
- 文档页数:10
HTTP是无状态、单向的协议,用户只能够通过客服端向服务器发送请求并由服务器处理发回一个响应。
若要实现聊天室、WEBQQ、在线客服、邮箱等这些即时通讯的应用,就要用到“ 服务器推送技术(Comet)”。
传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据。
种这种拉取数据的方式需要很短的时间间隔才能保证数据的精确度,但太短的时间间隔客服端会对服务器在短时间内发送出多个请求。
反转AJAX,就是所谓的长轮询或者COMET。
服务器与客服端需要保持一条长时间的请求,它使得服务器在有数据时可以返回消息给客户端。
html:view plaincopy to clipboardprint?1.<div id="msg"></div>2.<input id="btn" type="button" value="测试" />javascript:这里使用AJAX请求data.php页面获得…success‟的值,请求的时间达到80秒。
在这80秒中若没有从服务端返回…success‟则一直保持连接状态,直到有数据返回或…success‟的值为0才关闭连接。
在关闭连接后在继续下一次的请求。
view plaincopy to clipboardprint?1.$(function(){2.3.4. $("#btn").bind("click",{btn:$("#btn")},function(evdata){5. $.ajax({6. type:"POST",7. dataType:"json",8. url:"data.php",9. timeout:80000, //ajax请求超时时间80秒10. data:{time:"80"}, //40秒后无论结果服务器都返回数据11. success:function(data,textStatus){12.//从服务器得到数据,显示数据并继续查询13.if(data.success=="1"){14. $("#msg").append("<br>[有数据]"+data.text);15. evdata.data.btn.click();16. }17.//未从服务器得到数据,继续查询18.if(data.success=="0"){19. $("#msg").append("<br>[无数据]");20. evdata.data.btn.click();21. }22. },23.//Ajax请求超时,继续查询24. error:function(XMLHttpRequest,textStatus,errorThrown){25.if(textStatus=="timeout"){26. $("#msg").append("<br>[超时]");27. evdata.data.btn.click();28. }29. }30.31. });32. });33.34.});PHP:在这里是无限的循环,循环的结束条件就是获取到了返回结果返回Json数据。
参数类型说明url 为string(因此要⽤引号引起来)发送请求的地址type string请求的⽅式:post或get请求。
默认为get请求data Object或string发送服务器的数据,键值对,字符串或对象,这⾥post请求有此参数,get请求直接在地址处?后⾯传参即可dataTypestring后端返回给前端的数据类型,⽐如html,xml,json。
本来是string,在ajax请求时设置dataType为json,将字符串;类型变为json类型succ ess function请求成功后调⽤的回调函数,需要操作的东西⼀般在这⾥写⽤法success:function(e 这个字母e可以是其他英⽂){写内容} 注意这个()⾥⾯的e或者说其他东西就是后端HttpResponse或者JsonResponse返回的东西,这⾥与dataType有关error function请求失败时调⽤的回调函数asyn c Boolean是否异步处理,默认为True,false为同步处理ajax--实现异步请求,接受响应及执⾏回调ajax最⼤的优点是在不重新加载整个页⾯的情况下,可以与服务器交换数据并更新部分⽹页的内容ajax指是⼀种创建交互式⽹页应⽤的⽹页开发技术,其实就是实现前后端交互。
1)ajax是异步javascript,异步的意思即⾮阻塞,就像线程,在代码运⾏到ajax请求时,它会分成两条线,⼀条线去运⾏ajax请求⾥⾯的内容,另⼀条线去运⾏主程序(即ajax请求后⾯的代码),当然我们可以因需要异步设置成同步(即在运⾏到ajax请求时,将阻塞运⾏完ajax请求后,再去运⾏ajax外,后⾯的代码)2)注意ajax请求是由jquery发起的,因此⽤于jquery代码块中。
3)执⾏相应的视图函数(这⾥是在⼀个py,php等⽂件中创建⼀个视图函数,或者class类,给这个视图函数分级设置⼀个url地址,ajax请求中的url即填写这个完整的url地址),返回json内容。
jq常用方法jq是一个快速、简洁、灵活的JavaScript库,它允许我们轻松地操纵HTML文档,解析和处理JSON数据、处理表单和事件等。
在使用jq时,我们经常用到一些常用方法,那么接下来,我们就来一一讲解。
1. 选择器在jq中,选择器是最为基本的部分,它可以让我们快速地筛选元素,比如:- $("#id"):根据id选择元素。
- $(".class"):根据class选择元素。
- $("tag"):根据标签名选择元素。
- $("element").find(selector):在指定元素中查找符合条件的元素。
2. 事件绑定在jq中,我们可以通过事件绑定来实现在指定元素上触发事件。
常用的事件有:- $(selector).click(function(){}):点击元素触发事件。
- $(selector).mouseover(function(){}):鼠标移上元素触发事件。
- $(selector).submit(function(){}):表单提交触发事件。
- $(selector).focus(function(){}):元素获得焦点触发事件。
3. DOM操作在jq中,我们可以通过一些方法来快速地操作DOM元素,比如:- $(selector).html():获取或设置元素的HTML内容。
- $(selector).text():获取或设置元素的文本内容。
- $(selector).attr():获取或设置元素的属性。
- $(selector).addClass():为元素添加class。
- $(selector).remove():删除指定元素。
4. 动画效果在jq中,我们可以通过动态效果来增加网页的交互性,比如:- $(selector).show(speed,callback):显示元素,可以设置速度和回调函数。
jquery面试题jQuery是一种流行的JavaScript库,广泛用于前端开发中。
它简化了JavaScript代码的编写,提供了丰富的功能和便捷的操作方法。
在前端开发的招聘面试中,jQuery经常成为考察的重点。
下面是一些常见的jQuery面试题及其解答。
1. 什么是jQuery?jQuery是一个快速、简洁的JavaScript库,通过简化HTML文档遍历、事件处理、动画效果和Ajax等功能的操作,使开发者能更高效地开发交互式的Web页面。
2. 如何引入jQuery库?可以通过以下几种方式引入jQuery库:- 从官网下载jQuery库并链接到HTML文件中- 使用CDN(内容分发网络)引入jQuery库- 使用npm或yarn等包管理器安装jQuery库3. 如何选取HTML元素?使用jQuery选择器可以方便地选取HTML元素,常见的选择器有:- 元素选择器:$("element"),如$("p")- id选择器:$("#id"),如$("#myElement")- class选择器:$(".class"),如$(".myClass")- 属性选择器:$("[attribute]"),如$("[href]")- 群组选择器:$("selector1, selector2"),如$("p, .myClass")4. 如何修改元素的内容?可以使用以下方法修改元素的内容:- .text():设置或返回元素的文本内容- .html():设置或返回元素的HTML内容- .val():设置或返回表单元素的值5. 如何修改元素的属性?可以使用以下方法修改元素的属性:- .attr(attributeName, value):设置元素的属性值- .removeAttr(attributeName):移除元素的属性- .prop(propertyName, value):设置元素的属性值(不同于attr的地方在于,prop可以修改一些特殊属性如checked、disabled等)6. 如何隐藏和显示元素?可以使用以下方法隐藏和显示元素:- .hide():隐藏元素- .show():显示元素- .toggle():切换元素的显示和隐藏状态7. 如何添加和移除CSS类?可以使用以下方法添加和移除CSS类:- .addClass(className):添加CSS类- .removeClass(className):移除CSS类- .toggleClass(className):切换元素的CSS类状态8. 如何处理事件?可以使用以下方法处理事件:- .click(handler):点击事件- .mouseover(handler):鼠标移入事件- .mouseout(handler):鼠标移出事件- .keydown(handler):键盘按下事件- .keyup(handler):键盘释放事件- 其他常见事件还有mousedown、mouseup、mouseenter等9. 如何创建动画效果?可以使用以下方法创建动画效果:- .fadeIn():淡入效果- .fadeOut():淡出效果- .slideUp():向上滑动效果- .slideDown():向下滑动效果- .animate():自定义动画效果10. 如何发送Ajax请求?可以使用以下方法发送Ajax请求:- .load():从服务器加载数据并将返回的HTML内容插入到元素中- .get():从服务器获取数据- .post():向服务器发送数据- .ajax():更为灵活和强大的Ajax请求方法以上是一些常见的jQuery面试题及其解答,希望对您的面试准备有所帮助。
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对象。
jq 语法在现代web开发中,前端框架和库越来越多,其中最广泛使用的就是jQuery。
而jQuery的核心语法就是jq语法。
jq语法是一种简单、直观的语法,使得前端开发者可以更轻松地操作HTML文档,完成复杂的交互效果。
下面我们将分步骤阐述jq语法。
1.选择器操作jq语法以选择器为基础,选择器通常会从文档中选取一个或多个HTML元素,然后对它们进行操作。
通过写选择器代码,我们可以实现诸如元素的增删改查等各种操作。
常见的选择器语法包括 $(select)、element、.class、#id 等。
比如想通过属性名选择到对应的元素,则可以用$("element[attribute='value']")的方式进行选择。
2.操作DOM元素DOM是文档对象模型,通过DOM,我们可以访问网页中的任何元素,并且变态和交互etc。
在jq语法中,我们可以用$()函数将一个DOM元素包裹起来,之后可以对这个对象进行操作。
比如,我们可以用.addClass()、.removeClass()、.toggleClass()等方法来操作元素的样式、大小等属性。
3.事件绑定事件绑定也是jq语法中不可或缺的一部分。
我们可以通过让某个事件与某个操作(如单击某个元素)关联起来,从而触发一些动作。
在jq语法中,我们可以通过.on()或者.click()、.dblclick()等方法来进行绑定。
例如,我们可以写 $(selector).click(function(){)来让某个元素被点击时触发某个动作。
4.ajax请求通过ajax请求,我们可以异步地向后端请求数据,并将其集成到前端。
这样做的好处是可以实现无需刷新网页即可更新页面内容的功能。
在jq语法中,可以通过$.ajax()方法来处理异步请求,同时也可以通过.ajaxSuccess()、.ajaxError()、.ajaxComplete()等来处理请求成功、失败等的情况。
写法一:使用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请求的错误。
jquery table ajax reload的用法在现代的Web开发中,异步JavaScript和XML(AJAX)已经成为了一个不可或缺的部分,它允许我们在不重新加载整个页面的情况下,从服务器获取数据并更新页面的部分内容。
当与jQuery这样的JavaScript库结合使用时,AJAX的功能变得更加强大和易用。
在本文中,我们将详细讨论如何使用jQuery和AJAX来重新加载(reload)HTML表格的内容。
一、了解基础在开始之前,我们需要对jQuery和AJAX有一定的了解。
jQuery是一个轻量级的JavaScript库,它简化了HTML文档遍历、事件处理、动画和AJAX交互等Web开发常见任务。
AJAX则是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
二、为什么使用jQuery Table AJAX Reload在Web应用程序中,表格经常被用来展示数据。
当数据发生变化时,我们希望能够实时更新表格的内容,而不是重新加载整个页面。
这时,使用jQuery和AJAX来重新加载表格数据就变得非常有用。
它不仅可以提高用户体验,还可以减少服务器的负载。
三、基本用法假设我们有一个HTML表格,它的ID是“myTable”,并且我们有一个URL,该URL返回表格需要显示的数据。
下面是一个基本的例子,展示了如何使用jQuery和AJAX来重新加载这个表格的内容:$(document).ready(function() {// 定义一个函数来加载表格数据function loadTableData() {$.ajax({url:'your_data_url', // 数据URLtype:'GET', // 请求类型dataType:'json', // 预期服务器返回的数据类型success:function(data) {// 当请求成功时,这里会被执行// 假设data是一个包含表格数据的数组var tableBody =$("#myTable tbody"); // 获取表格的tbody元素tableBody.empty(); // 清空现有的表格内容// 遍历数据并创建表格行$.each(data, function(index, row) {var newRow =$("<tr><td>"+ row.column1+"</td><td>"+ row.column2+"</td></tr>"); tableBody.append(newRow); // 将新行添加到表格中});},error:function(jqXHR, textStatus, errorThrown) {// 当请求失败时,这里会被执行console.error("AJAX error: "+ textStatus +' - '+ errorThrown);}});}// 初始加载表格数据loadTableData();// 可以根据需要,例如定时器、按钮点击事件等,再次调用loadTableData函数来重新加载表格数据});四、进阶用法1. 使用模板引擎:当表格结构变得复杂时,手动拼接HTML字符串可能会变得非常繁琐且容易出错。
ajax与后台进⾏数据交互的⼏种常⽤⽅式(最全)1.get请求 ⽅式⼀:$.ajax{()}$.ajax({type : 'get',// 请求⽅式,可以不声明该属性,默认值就是geturl : 'getParams',// 请求地址data : {// 请求数据,这个参数可以去掉,也就是只发送请求不携带数据name : 'Marydon',work : '程序员'},success : function(result){// 请求成功alert(result);},error : function(result){// 请求失败,这个参数⼀般情况下不⽤携带alert(result);}}); 说明:当是get类型时,可以不声明type,默认请求⽅式就是get请求 ⽅式⼆:$.get();$.get('getParams',// 请求地址{// 请求数据name : 111,work : '程序员'},function(result) {// 请求成功alert(result);}); ⽅式三:$.getJSON();$.getJSON('getParams',// 请求地址{// 请求数据name : 'Marydon',work : '程序员'},function(result) {// 请求成功,要求返回的数据必须是json格式的字符串,返回其它类型数据接收不到alert(JSON.stringify(result));}); 后台返回json数据及前台对应的接收⽅式 ⽅式⼀:返回json字符串 当后台没有指定返回数据格式为application/json数据时,默认是text/html⽂本数据,ajax将会根据Content-Type属性⾃动将dataType属性的值设置为:text,也就是按照字符串来解析返回的数据。
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引擎后,会触发你设置的事件,从⽽执⾏⾃定义的js逻辑代码完成某种页⾯功能.AJAX的使⽤:基本步骤: 1.获得ajax请求 2.设置回调函数 3.确定请求路径 4.发送请求原⽣态JavaScript实现AJAX程序<script type="text/javascript">function func(){//创建ajax引擎对象var xmlhttp = new XMLHttpRequest()://ajax引擎对象绑定事件,监听服务器响应数据xmlhttp.onreadystatechange=function(){if(xmlhttp.readState == 4 && xmlhttp.status ==200){alert(xmlhttp.responseText);}}}xmlhttp.open("GET","/WEB/ajaxJS",true);xmlhttp.send();</script>$.get()函数是实现AJAX(带⽅法签名)1.参数url:请求的服务器地址2.参数data:提交的参数3.参数fn:服务器响应成功的回调函数4.参数dataType:服务器响应的数据格式(text或者json)注意使⽤格式:⽅法签名使⽤,必须以{} 形式包裹<script type="text/javascript">function ajaxGet(){$.get({//提交服务器的地址url:"/WEB/jqueryAjax",// 提交服务器的参数data:"name=zhangsan&age=20",// 相应成功后的回调函数,data是服务器响应的数据success:function(data){alert(data)},// 服务器响应的数据格式dataType:"text"});}</script>$.post()函数实现AJAX(带⽅法签名)get和post函数的写法⼀致,区别在于get提交参数在请求⾏,⽽post提交参数在请求体.<script type="text/javascript">function ajaxPost(){$.post({//提交服务器的地址url:"/WEB/jqueryAjax",// 提交服务器的参数data:"name=zhangsan&age=20",// 相应成功后的回调函数,data是服务器响应的数据success:function(data){alert(data)},// 服务器响应的数据格式dataType:"text"});}</script>$.get()函数实现AJAX(不带⽅法签名)注意格式:不带⽅法签名,去掉{},不在需要写⽅法签名,例如url:data:等,但是注意参数的顺序不能出现错误,参数的书序必须是:url>data>success>dataType,$.post和get⽤法⼀致,不在重复.<script type="text/javascript">function func(){$.get(//提交到服务器地址"/WEB11/jqueryAjax",//要提交到服务器的数据"username=zhangsan&age=18",//相应成功后的回调函数,data是服务器响应的数据function(data){alert(data);},//服务器响应的数据格式"text");}</script>$.post()函数实现AJAX(不带⽅法签名的)和$.get出⼊不⼤<script type="text/javascript">function func(){$.post(//提交到服务器地址"/WEB11/jqueryAjax",//要提交到服务器的数据"username=zhangsan&age=18",//相应成功后的回调函数,data是服务器响应的数据function(data){alert(data);},//服务器响应的数据格式"text");}</script>$.ajax()函数实现AJAX$.ajax⽅法是get和post的底层实现⽅法,该⽅法使⽤更加灵活,参数更加丰富,并可以设置异步或者同步,上层⽅法简单易⽤,代码量较少,底层⽅法灵活性更强,⽅法签名更多,代码量⽐较多.<script type="text/javascript">$.ajax({async:true, //同步或者异步data:"name=zhangsan&age=22",//请求参数dataType:"text",//返回的数据格式error:function(){//请求失败alert("error");},success:function(data){//响应成功,返回的数据alert(data);},type:"GET",url:"/WEB11/jqueryAjax"});</script>JSON数据格式JSON(javascript Object Notation)是⼀种轻量级的数据交换格式.JSON采⽤完全独⽴于语⾔的⽂本格式,就是说不⽤的编程语⾔JSON数据是⼀致的.JS原⽣⽀持JSON.JSON的两种数据格式 数组格式:[obj,obj,obj...] 对象格式:{"key1" : obj ,"key2" : obj,"key3" : obj....} 两种格式可以进⾏任意的嵌套.案例⼀:<script type="text/javascript">/*** 案例⼀* {key:value,key:value}** class Person{* String firstname = "张";* String lastname = "三丰";* Integer age = 100;* }** Person p = new Person();* System.out.println(p.firstname);*/var json = {"firstname":"张","lastname":"三丰","age":100};alert(json.firstname+":::"+json.age);</script>案例⼆<script type="text/javascript">/*** 案例⼆* [{key:value,key:value},{key:value,key:value}]*/var json = [{"lastname":"张","firstname":"三丰","age":100},{"lastname":"张","firstname":"⽆忌","age":99},{"lastname":"张","firstname":"翠⼭","age":98}];for(var i=0;i<json.length;i++){alert(json[i].firstname+":::"+json[i].age);}alert(json[1].age);</script>案例三<script type="text/javascript">/*** 案例三* {* "param":[{key:value,key:value},{key:value,key:value}]* }*/var json = {"baobao":[{"name":"zhangsan",age:15},{"name":"lisi",age:20}]};for(var i = 0 ; i <json.baobao.length;i++){alert(json.baobao[i].name+"...."+json.baobao[i].age);}</script>案例四<script type="text/javascript">/*** 案例四* {* "param1":[{key:value,key:value},{key:value,key:value}],* "param2":[{key:value,key:value},{key:value,key:value}],* "param3":[{key:value,key:value},{key:value,key:value}]* }*/var json = {"baobao":[{"name":"zhangsan","age":20},{"name":"lisi","age":25}],"haohao":[{"name":"wangwu","age":30},{"name":"zhaoliu","age":10}]};alert(json.haohao[0].name);</script>AJAX的JSON数据使⽤客户端向服务器发送请求,服务器响应的数据必须是json格式.<script type="text/javascript">function func(){$.post("/WEB11/ajaxJson",function(data){alert(+"..."+data.age);},"json");}</script>Java数据转成json格式数据json的转换插件是通过java的⼀些⼯具,直接将java对象或者集合转换成为json字符串,常⽤的json转换⼯具有如下⼏种: 1.jsonlib 2.Gson:googlepublic void doGet(HttpServletRequest request, HttpServletResponseresponse) throws ServletException, IOException {User user = new User();user.setId(100);user.setUsername("tom");user.setPassword("123");User user2 = new User();user2.setId(200);user2.setUsername("jerry");user2.setPassword("456");List<User> list = new ArrayList<User>();list.add(user);list.add(user2);// String json = JSONObject.fromObject(user).toString();String json = JSONArray.fromObject(list).toString();Gson gson = new Gson();json = gson.toJson(list);response.getWriter().write(json);}案例⽤户名的异步校验实现思路为:1.<input name="username"> 失去焦点时,使⽤$.post() 将⽤户名username以ajax⽅式发送给服务器2. 服务器获得⽤户名,并通过⽤户名查询⽤户 1. 如果⽤户名存在,返回不可⽤提⽰ 2. 如果⽤户名可⽤,返回可⽤提⽰3. 根据服务器响应的json数据,控制提⽰信息的显⽰和提交的按钮是否可⽤。
jQuery的Ajax实现异步传输List、Map由于项目需要通过ajax得到后台的List对象里面的值,由于没有接触过json所以前期我只能先传字符串再在js里截取子串实现。
闲暇时间摸索了一下关于json接受List对象的方法,步骤如下:1.首先下载json所以依赖的包, Json-lib 最新版 json-lib-2.3-jdk15.jar,其官方网站是:/可以直接download,细心的你会发现其网站页面里面有提示它还需要其他包:Json-lib requires (at least) the following dependencies in your classpath: jakarta commons-lang 2.4jakarta commons-beanutils 1.7.0jakarta commons-collections 3.2jakarta commons-logging 1.1.1ezmorph 1.0.6其中一般项目中都会有前4个,所以只需要下载ezmorph 1.0.6 就可以了下载地址分别是:/lang//beanutils//collections//logging//2.首先先见一个小web项目先建一个User类:package com.json;public class User {String username;String password;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}再建一个servletpackage com.json;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONArray;public class TestJson extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request,response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");String str= request.getParameter("name");//得到ajax传递过来的paramaterSystem.out.print(str);PrintWriter out = response.getWriter();List list = new ArrayList();//传递ListMap m=new HashMap();//传递MapUser u1=new User();u1.setUsername("zah");u1.setPassword("123");User u2=new User();u2.setUsername("ztf");u2.setPassword("456");list.add(u1); //添加User对象list.add(u2); //添加User对象m.put("u1", u1);m.put("u2", u2);JSONArray jsonArray2 = JSONArray.fromObject( list );//转化成json 对象JSONObject jo=JSONObject.fromObject(m);//转化Map对象out.print(jsonArray2);//返给ajax请求out.print(jo);//返给ajax请求}}配置好web.xml中的servlet映射,这一步就略了。
JQuery CORS请求方法一、什么是CORS?跨源资源共享(CORS)是一种机制,可以让不同源的服务器之间进行安全数据传输。
在Web开发中,由于浏览器的同源策略限制,一般情况下只允许同源服务器之间进行数据传输,跨域请求会被浏览器拦截。
CORS机制的出现,解决了这种限制,实现了安全地跨域数据传输。
二、JQuery中的CORS请求JQuery库提供了方便的方法用于发起跨域请求。
通过JQuery的ajax()方法,可以轻松地实现CORS请求。
```javascript$.ajax({url: 'type: 'GET',crossDom本人n: true,success: function(data) {// 处理返回的数据},error: function() {// 处理错误}});```以上是一个典型的JQuery CORS GET请求示例。
在ajax()方法中加入crossDom本人n:true参数,即可启用CORS请求。
其余参数与普通的ajax请求一致。
三、JQuery CORS POST请求与GET请求类似,使用JQuery发起CORS POST请求也非常简单。
```javascript$.ajax({url: 'type: 'POST',crossDom本人n: true,data: {key1: 'value1',key2: 'value2'},success: function(data) {// 处理返回的数据},error: function() {// 处理错误}});```以上代码示例中,我们使用JQuery的ajax()方法发起了一个CORS POST请求。
通过传递data参数,可以向目标服务器提交需要的数据。
四、JQuery CORS请求中的凭据传递在一些情况下,需要在CORS请求中传递凭据(如cookie、HTTP认证信息)。
ajax的同步请求方法
AJAX(AsynchronousJavaScriptandXML)是一种用于创建交互式Web应用程序的技术。
它允许在不重新加载整个页面的情况下更新页面的一部分。
在AJAX中,数据可以通过异步请求发送到服务器,并在响应返回之前继续执行其他任务。
然而,有时候我们需要确保在数据返回之前不执行其他任务。
这就需要使用AJAX的同步请求方法。
同步请求会等待服务器响应之后才会继续执行代码,而不是在等待期间继续执行其他任务。
使用AJAX的同步请求方法的语法如下:
```
var xhr = new XMLHttpRequest();
xhr.open('GET', '/some/url', false); // 第三个参数表示是否使用同步请求
xhr.send(null);
if (xhr.status === 200) {
console.log(xhr.responseText);
}
```
可以看到,在使用AJAX的同步请求方法时,我们需要将`open()`方法的第三个参数设置为`false`。
这将告诉浏览器发送同步请求。
在发送请求后,我们使用`status`属性来检查响应的状态码,如果状态码为200,则表示请求成功,我们可以使用`responseText`属性来
获取服务器返回的数据。
需要注意的是,使用AJAX的同步请求方法会阻塞浏览器并使其不响应其他任务,因此应该尽可能避免使用同步请求。
如果必须使用同步请求,请确保在请求期间进行适当的UI提示,以便用户知道应用程序正在执行任务。
为jquery的ajax请求添加超时timeout时间的操作⽅法下⾯给⼤家介绍为jquery的ajax请求添加超时timeout时间的实例有时侯要⽤ajax来轮询某个服务是否可⽤,但是各个浏览器ajax的超时时间有可能不⼀样,所以希望ajax能只尝试⼏秒钟,然后隔⼏秒再次发送⼀次ajax检查⼀次。
可以⽤timeout属性。
var checkLoading = function(timer) {//先延时再获取状态,否则⽴即获取可能重启前的服务还没有关闭setTimeout(function() {$.ajax({url: '/onceos/version',dataType: 'json',timeout: 4000,success: function(result) {console.log('OK')},error: checkLoading})}, timer || 1000)}//第⼀次等10秒,第⼀次轮checkLoading(10000)补充:下⾯介绍下jquery ajax超时设置var ajaxTimeoutTest = $.ajax({ url:'', //请求的URL timeout : 1000, //超时时间设置,单位毫秒 type : 'get', //请求⽅式,get或post data :{}, //请求所传参数,json格式 dataType:'json',//返回的数据格式 success:function(data){ //请求成功的回调函数 alert("成功"); }, complete : function(XMLHttpRequest,status){ //请求完成后最终执⾏参数 if(status=='timeout'){//超时,status还有success,error等值的情况 ajaxTimeoutTest.abort(); alert("超时"); } }});设置timeout的时间,通过检测complete时status的值判断请求是否超时,如果超时执⾏响应的操作。
jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯。
废话少说,直接进入正题,我们先来看一些简单的方法,这些方法都是对jQuery.ajax()进行封装以方便我们使用的方法,当然,如果要处理复杂的逻辑,还是需要用到jQuery.ajax()的(这个后面会说到).1. load( url, [data], [callback] ) :载入远程HTML 文件代码并插入至DOM 中。
url (String) : 请求的HTML页的URL地址。
data (Map) : (可选参数) 发送至服务器的key/value 数据。
callback (Callback) : (可选参数) 请求完成时(不需要是success的)的回调函数。
这个方法默认使用GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的。
jQuery 1.2 中,可以指定选择符,来筛选载入的HTML 文档,DOM 中将仅插入筛选出的HTML 代码。
语法形如"url #some > selector"。
这个方法可以很方便的动态加载一些HTML文件,例如表单。
示例代码:$(".ajax.load").load("[url]/QLeelulu/archive/2008/03/30/1130270.html[/url] .post",function (responseText, textStatus, XMLHttpRequest){this;//在这里this指向的是当前的DOM对象,即$(".ajax.load")[0]//alert(responseText);//请求返回的内容//alert(textStatus);//请求状态:success,error//alert(XMLHttpRequest);//XMLHttpRequest对象});这里将显示结果。
注:不知道为什么URL写绝对路径在FF下会出错,知道的麻烦告诉下。
下面的get()和post()示例使用的是绝对路径,所以在FF下你将会出错并不会看到返回结果。
还有get()和post()示例都是跨域调用的,发现传上来后没办法获取结果,所以把运行按钮去掉了。
2. jQuery.get( url, [data], [callback] ):使用GET方式来进行异步请求参数:url (String) : 发送请求的URL地址.data (Map) : (可选) 要发送给服务器的数据,以Key/value 的键值对形式表示,会做为QueryString附加到请求URL中。
callback (Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。
这是一个简单的GET 请求功能以取代复杂$.ajax 。
请求成功时可调用回调函数。
如果需要在出错时执行函数,请使用$.ajax。
示例代码:$.get("./Ajax.aspx", {Action:"get",Name:"lulu"}, function (data, textStatus){//返回的 data 可以是 xmlDoc, jsonObj, html, text, 等等.this; // 在这里this指向的是Ajax请求的选项配置信息,请参考下图alert(data);//alert(textStatus);//请求状态:success,error等等。
当然这里捕捉不到error,因为error的时候根本不会运行该回调函数//alert(this);});点击发送请求:jQuery.get()回调函数里面的this ,指向的是Ajax请求的选项配置信息:3. jQuery.post( url, [data], [callback], [type] ) :使用POST 方式来进行异步请求参数:url (String) : 发送请求的URL地址.data (Map) : (可选) 要发送给服务器的数据,以Key/value 的键值对形式表示。
callback (Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。
type (String) : (可选)官方的说明是:Type of data to be sent。
其实应该为客户端请求的类型(JSON,XML,等等)这是一个简单的POST 请求功能以取代复杂$.ajax 。
请求成功时可调用回调函数。
如果需要在出错时执行函数,请使用$.ajax。
示例代码:Ajax.aspx:Response.ContentType = "application/json";Response.Write("{result: ’’" + Request["Name"] + ",你好!(这消息来自服务器)’’}");jQuery 代码:$.post("Ajax.aspx", { Action: "post", Name: "lulu" },function (data, textStatus){// data 可以是 xmlDoc, jsonObj, html, text, 等等.//this; // 这个Ajax请求的选项配置信息,请参考jQuery.get()说到的thisalert(data.result);}, "json");点击提交:这里设置了请求的格式为"json":如果你设置了请求的格式为"json",此时你没有设置Response回来的ContentType 为:Response.ContentType = "application/json"; 那么你将无法捕捉到返回的数据。
注意一下,alert(data.result); 由于设置了Accept报头为“json”,这里返回的data就是一个对象,并不需要用eval()来转换为对象。
4. jQuery.getScript( url, [callback] ) : 通过GET 方式请求载入并执行一个JavaScript 文件。
参数url (String) : 待载入JS 文件地址。
callback (Function) : (可选) 成功载入后回调函数。
jQuery 1.2 版本之前,getScript 只能调用同域JS 文件。
1.2中,您可以跨域调用JavaScript 文件。
注意:Safari 2 或更早的版本不能在全局作用域中同步执行脚本。
如果通过getScript 加入脚本,请加入延时函数。
这个方法可以用在例如当只有编辑器focus()的时候才去加载编辑器需要的JS文件.下面看一些示例代码:加载并执行test.js。
jQuery 代码:$.getScript("test.js");加载并执行AjaxEvent.js ,成功后显示信息。
jQuery 代码:$.getScript("AjaxEvent.js", function(){alert("AjaxEvent.js 加载完成并执行完成.你再点击上面的Get或Post按钮看看有什么不同?");});加载完后请重新点击一下上面的Load 请求看看有什么不同。
jQuery Ajax 事件Ajax请求会产生若干不同的事件,我们可以订阅这些事件并在其中处理我们的逻辑。
在jQuery这里有两种Ajax事件:局部事件和全局事件。
局部事件就是在每次的Ajax请求时在方法内定义的,例如:$.ajax({beforeSend: function(){// Handle the beforeSend event},complete: function(){// Handle the complete event}// ...});全局事件是每次的Ajax请求都会触发的,它会向DOM中的所有元素广播,在上面getScript() 示例中加载的脚本就是全局Ajax事件。
全局事件可以如下定义:$("#loading").bind("ajaxSend", function(){$(this).show();}).bind("ajaxComplete", function(){$(this).hide();});或者:$("#loading").ajaxStart(function(){$(this).show();});我们可以在特定的请求将全局事件禁用,只要设置下global 选项就可以了:$.ajax({url: "test.html",global: false,// 禁用全局Ajax事件.// ...});下面是jQuery官方给出的完整的Ajax事件列表:∙ajaxStart (Global Event)This event is broadcast if an Ajax request is started and no other Ajax requests are currently running.∙beforeSend (Local Event)This event, which is triggered before an Ajax request is started, allows you to modify the XMLHttpRequest object (setting additional headers, if need be.)∙ajaxSend (Global Event)This global event is also triggered before the request is run.∙success (Local Event)This event is only called if the request was successful (no errors from the server, no errors with the data).∙ajaxSuccess (Global Event)This event is also only called if the request was successful.∙error (Local Event)This event is only called if an error occurred with the request (you can never have both an error and a success callback with a request). ∙ajaxError (Global Event)This global event behaves the same as the local error event.∙complete (Local Event)This event is called regardless of if the request was successful, or not. You will always receive a complete callback, even for synchronous requests.∙ajaxComplete (Global Event)This event behaves the same as the complete event and will be triggered every time an Ajax request finishes.∙ajaxStop (Global Event)This global event is triggered if there are no more Ajax requests being processed.具体的全局事件请参考API文档。