jquery ajax
- 格式:docx
- 大小:96.42 KB
- 文档页数:14
jquery $.ajax 同步调用实现原理jQuery .ajax 同步调用实现原理在前端开发中,经常会涉及到使用Ajax进行异步请求。
而jQuery库中的.ajax()方法是非常常用的一种实现方式。
.ajax()方法使用起来非常方便,可以对数据进行异步请求,并且可以设置回调函数来处理返回的数据。
但是有时候我们需要在请求完成之前进行一些操作,此时可以使用同步调用的方式来实现。
本文将详细介绍使用jQuery .ajax()方法进行同步请求的实现原理。
1. .ajax()方法简介.ajax()是jQuery库中用于发送HTTP请求的核心方法。
它是一个异步方法,可以向服务器发送GET、POST等请求,并处理服务器返回的数据。
.ajax()方法使用一个包含键值对的配置对象作为参数,可以设置请求的地址、请求方式、请求参数、回调函数等。
当请求完成时,可以在回调函数中处理返回的数据。
2. 异步请求与同步请求的区别在讲解实现原理之前,我们先来了解一下异步请求和同步请求的区别:- 异步请求:是指在发送请求的同时,主线程不会阻塞,而是继续执行后续的代码。
当请求完成后,会通过回调函数来处理返回的数据。
异步请求一般使用于需要较长时间才能返回结果的场景,如网络请求、文件上传等。
- 同步请求:是指在发送请求的同时,主线程会一直等待请求的响应结果,而不会继续执行后续的代码。
只有在请求完成后,才会继续执行下面的代码。
同步请求一般使用于需要立即获取结果的场景,如表单提交、页面加载等。
在默认情况下,.ajax()方法是异步请求的,即发送请求后会继续执行后续的代码。
而实现同步请求则需要额外的设置。
3. 同步请求的设置要实现同步请求,可以通过设置.ajax()方法的async选项为false来实现。
async的默认值为true,表示异步请求,当设置为false时表示同步请求。
示例代码:javascript.ajax({url: 'example',async: false,其他配置项...success: function(data) {处理返回的数据}});4. 同步请求的实现原理实现同步请求的关键在于事先知道请求需要的时间,以便正确地进行阻塞。
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对象});这里将显示结果。
jquery中$.ajax()⽅法使⽤详解1.url说明:发送请求的地址(默认为当前页⾯),要求是String类型的参数,⽐如是.net下,"~wexin(控制器)/getweinxinmenu(动作)",2.type说明:请求⽅法(post或者get),默认是get,要求是String类型的参数。
其他的htpp请求如(put、delete)等也⽀持,但是要浏览器⽀持3.timeout说明:设置请求超时时间(毫秒),要求是number类型的参数。
此设置将覆盖$.ajaxSetup()⽅法的全局设置。
4.async说明:默认值为true,所有请求是异步,要求是Bool类型的参数,如果需要发送同步请求,将此项设置为false。
注意:同步时浏览器会被锁住。
5.cache说明:默认为true(当datatype为script时,默认为false)从浏览器缓存中加载请求信息,要求是Bool类型的参数。
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,并作为回调函数参数传递。
HTML(Hyper Text Markup Language超文本标记语言)是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言。
HTML文本是由HTML 命令组成的描述性文本,HTML命令可以说明文字、图形、动画、声音、表格、链接等。
HTML的结构包括头部(Head)、主体(Body)两大部分,其中头部描述浏览器所需的信息,而主体则包含所要说明的具体内容。
CSS(Cascading Style Sheet层叠式样式表)目前推荐遵循的是W3C于1998年5月12日推出的CSS2。
CSS标准建立的目的是以CSS 进行网页布局,控制网页的表现。
CSS标准布局与XHTML结构语言相结合,可以实现表现与结构相分离,提高网站的使用性和可维护性。
<!--[if IE]> Only IE<![endif]--><!--[if !IE]><!--> Only !IE<!--<![endif]-->JavaScriptJavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。
同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。
jQueryjQuery是继Prototype之后又一个优秀的JavaScript框架。
它是轻量级的JS库(压缩后只有21k) ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。
jQuery使用户能更方便地处理HTML DOCUMENTS、EVENTS、实现动画效果,并且方便地为网站提供AJAX交互。
jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。
jQuery能够使用户的HTML 页保持代码和HTML内容分离,也就是说,不用再在HTML里面插入一堆JS来调用命令了,只需定义ID即可。
写法一:使用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中的AJAX详解目录(?)[-]load()方法load(url,[data],[callback])url为被加载的页面地址data表示发送到服务器的数据,格式为key/valuecallback格式为:function(responseText,textStatus,XMLHttpRequest){ }//responseText:请求返回的内容//textStatus:请求状态:success、error、notmodified、timeout这4种//XMLHttpRequest:XMLHttpRequest对象load()方法的传递方式根据参数data来自动指定。
如果没有参数传递,则采用GET方式传递;反之,则自动转换为POST 方式[javascript]view plaincopyprint?1.$("#div1").load(2."jsp/feed.jsp", //如果为" jsp/feed.jsp .filterClass",则表示获取jsp页面中类名为filterClass的全部元素3.{4. name :clf, age : 255.//经测试,变量名加引号、单引号、不加引号,后台都能取到值6.//如果含有中文,必须用encodeURI()进行编码,然后再服务器端用decodeURI()解码即可,如7.// {name:encodeURI($("#uName").val()),"password":$("#uPassword").val()},8.}, //也可以用数组传值,{"attr []",["clf","25","male"]}9.function (){10. $("#div2").text("AJAX");11.}12.);[javascript]view plaincopyprint?1.$("div").load("wrongname.xml",function(response,status,xhr){2.if (status=="success")3. {4. $("div").html("<ol></ol>");5. $(response).find("artist").each(function(){6. <span style="white-space:pre"> </span>varitem_text = $(this).text();7. <span style="white-space:pre"> </span>$('<li></li>').html(item_text).appendTo('ol');8. <span style="white-space:pre"> </span> });9. }10.else11. {12. $("div").html("Anerror occured: <br/>" + xhr.status + " " + xhr.statusText)13. }14. });getJSON()方法getJSON(url,[data],[callback])callback格式为function(data,textStatus) { }data是一个返回的json对象[javascript]view plaincopyprint?1.$.getJSON("test.js",{ name: "John", time: "2pm" }, function(json){2. alert("JSON Data: " +ers[3].name);3.});getScript()方法getScript(url,[callback])callback格式为function(response,status)response - 包含来自请求的结果数据status - 包含请求的状态("success","notmodified", "error", "timeout" 或"parsererror")通过此函数注入的脚本会自动执行get()方法get(url,data,callback(response,status,xhr),dataType)dataType可能的类型:"xml"、"html" 、"text"、"script"、"json"、"jsonp"get() 方法通过远程HTTPGET 请求载入信息。
1.ajax传输用字符串,后台接收参数用request.getParameter,所以前台必须有Parameter 如"/FirstServlet/regPage?countryId=" + countryId2.后台向前台传参数通过response,PrintWriter pw = resp.getWriter();pw.print(“df”);前台接收参数用var txt = xhr.responseText;3.如果用json字符串传输前台用jQuery.ajax是如下data : {'mydata':jsonStr},jQuery.ajax({type: "post",url: url,dataType : 'json',data : {'mydata':jsonStr},success: function(data,textStatus){alert("操作成功");},error: function(xhr,status,errMsg){alert("操作失败!");}});后台一样用request如String jsonStr = ServletActionContext.getRequest().getParameter("mydata");4.后台向前台传值一样用response如pw.print(jsonList.toString());前台接收jQuery用success: function(data,textStatus)data就是一个json(自动将json字符串转化为了json)5.json与json字符串之间的转化json的格式两种:数组["hello", 12, true , null];和对象{ "color": "red", "doors" : 4, "paidFor" : true };前台:json-json字符串JSON.stringify(jsonobj);$("#form").serialize()//表单转化为json字符串json字符串-jsoneval('(' + jsonstr + ')');JSON.parse(jsonstr);使用Function对象来进行返回解析function(data,textStatus){后台:json-json字符串jsonObj.toString()json字符串-jsonJSONObject obj1 = JSONObject.fromObject("{'dsaf':'uuuu'}");JSONObject obj = JSONObject.fromObject(address);//把对象转化为json。
一、引言在web开发中,经常会涉及到表格数据的展示和操作。
而jquery datatable是一个非常方便高效的表格插件,结合ajax技术,能够实现对大量数据的快速加载和操作。
本文将介绍jquery datatable与ajax的结合用法,帮助读者更好地掌握这一技术。
二、jquery datatable简介1. jquery datatable是一款基于jquery库的表格插件,它提供了丰富的功能和选项,可以让用户对表格数据进行排序、过滤、分页等操作,使得数据展示更加直观和易用。
2. 使用jquery datatable可以大大简化对表格数据的操作,提高用户体验和开发效率,因此在web开发中被广泛应用。
三、ajax技术简介1. ajax是一种在web应用中实现异步数据交互的技术,通过在不刷新整个页面的情况下向服务器发送请求和获取数据,能够提升用户体验和页面加载速度。
2. ajax技术可以实现对服务器端数据的异步获取和更新,是实现动态交互式web页面的重要手段。
四、jquery datatable与ajax的结合用法1. 初始化datatable在使用jquery datatable之前,首先需要对表格进行初始化设置。
通过调用datatable()方法,可以传入一些选项参数,来配置表格的各种功能和样式。
例如:```javascript$('#example').DataTable({"processing": true,"serverSide": true,"ajax": {"url": "data.php","type": "POST"}});```在上面的例子中,我们设置了表格的处理模式为服务器端处理,然后通过ajax选项指定了数据的获取方式,url为数据获取的信息,type为请求的方式。
Jquery发送ajax请求以及datatype参数为textJSON⽅式Jquery发送ajax请求以及datatype参数为text/JSON⽅式1、⽅式⼀:datatype:'text'2、⽅式⼆:datatype:'JSON'3、使⽤gson-1.5.jar包和json-2.2.jar包处理JSON代码(注:使⽤json-2.2.jar包时,传给前端的结果,获取时不是json对象,需要var json = eval_r("("+data+")");转义⼀下。
⽽使⽤gson-1.5.jar包时,传给前端的结果就是json对象。
⽆需进⾏转义。
)1、⽅式⼀:datatype:'text'1.1 页⾯端的ajax请求:$.ajax({type: "POST",url: "<%=basePath%>getAllUser.action?randomNum="+new Date().getTime(),data : {},datatype : 'text',cache: false,async: false,success:function(data) {strHtml = data的处理结果; //对data数据进⾏处理,拼接成html代码块$("#userList").html(strHtml); //也可以使⽤:$("#userList").append(strHtml);}},error:function(){alert("获取⽤户信息失败,请联系管理员!");}});//end ajax1.2 后台java代码处理:public String getAllUser(){response.setContentType("text;charset=UTF-8");// 设置返回的⽂档类型response.setHeader("Cache-Control", "no-cache");response.setCharacterEncoding("UTF-8");PrintWriter out = null;String text = "";try {out = response.getWriter();} catch (Exception e) {text = "false";logger.error(e.getMessage());}//TODO 获取所有⽤户信息,遍历//text = "userId1,userId2,userId3";out.print(text);out.flush();out.close();return null;}2、⽅式⼆:datatype:'JSON'2.1 页⾯端的ajax请求:$.ajax({type: "POST",url: "<%=basePath%>getAllUser.action",datatype : 'JSON',cache:false,success : function(data) {$.each(data,function(entryIndex,entry){var userId=entry.id;var userName=erName;......// TODO strHtml = 构造显⽰的html代码块;// 以追加⽅式进⾏填充内容$("#userList").append(strHtml);});//end each}// end success2.2 后台java代码处理:public String getAllUser() throws Exception {try {response = ServletActionContext.getResponse();response.setContentType("application/json");response.setCharacterEncoding("gbk");List<User> userList = new ArrayList<User>();for (int i = 0; i < size; i++) {User user = new User();user.setUserId(i);user.setUserName("kobicc" + i);......//这个逻辑需要从数据库中获取结果即可。
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("/yeer/archive/2009/06/10/ 1500682.html .post",function (responseText, textStatus, XMLHttpRequest){this;//在这里this指向的是当前的DOM对象,即$(".ajax.load")[0]//alert(responseText);//请求返回的内容//alert(textStatus);//请求状态:success,error//alert(XMLHttpRequest);//XMLHttpRequest对象});这里将显示结果。
jquery中AJAX请求$.post⽅法的使⽤使⽤jQuery的$.post⽅法可以以POST形式向服务器发起AJAX请求。
$.post⽅法是jQuery的实⽤⼯具⽅法。
post和get发送⽅式的特点, GET ⽅法提交数据不安全,数据置于请求⾏,客户端地址栏可见; GET ⽅法提交的数据⼤⼩限制在255 个字符之内。
POST⽅法提交的数据置于消息主体内,客户端不可见, POST ⽅法提交的数据⼤⼩没有限制。
$.post⽅法语法$.post(url,parameters,callback)参数url(字符串)服务器端资源地址。
parameter(对象)需要传递到服务器端的参数。
参数形式为“键/值”。
callback(函数)在请求完成时被调⽤。
该函数参数依次为响应体和状态。
返回值XHR实例看个简单的例⼦客户端代码:<html xmlns="/1999/xhtml"><head><title></title><script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script><script type="text/javascript">$().ready(function () { $('#selectNum').change(function () { var idValue = $(this).val(); //采⽤POST⽅式调⽤服务 $.post('Server.aspx', { id: idValue }, function (text, status) { alert(text); }); })})</script></head><body><select id="selectNum"> <option value="0">--Select--</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option></select></body></html>服务端主要代码:protected void Page_Load(object sender, EventArgs e){ if (!Page.IsPostBack) { if (Request["id"] != null && !string.IsNullOrEmpty(Request["id"].ToString())) { Response.Write( GetData(Request["id"].ToString())); } }}protected string GetData(string id){ string str = string.Empty; switch (id) { case "1": str += "This is Number 1"; break; case "2": str += "This is Number 2"; break; case "3": str += "This is Number 3"; break; default: str += "Warning Other Number!"; break; } return str;}运⾏程序,结果如图:⽤httpwatcher拦截请求信息,当下拉框中选择数字时,可以截取到如下请求信息。
使⽤jquery的ajax需要注意的地⽅dataType的设置
昨天在做ajax时遇到问题,
复制代码代码如下:
<SPAN style="WHITE-SPACE: pre">
</SPAN>$.ajax({
url:'<{$weburl}>/main.php?action=getDepart&cid='+cid,
type:'post',
dataType:'json',
success:function(data){
//data=eval('('+data+')');
if(data.s==1)
{
$('#depart').html('');
$('#depart').html(data.departs);
}
else
{
alert('获取院系失败');
}
}
});
以前没有特别注意过这个问题,⼀开始没有设置dataType:'json',就出现⽆法解析返回的data数据,会把data当作字符串处理,⽽不是json对象,所有我使⽤了eval来转换,⽽且在服务端由于发回的数据包含了很多html标签,也⽆法正确读取,导致data 报错,我记得以前是不⽤设dataType的,很奇怪,不知道是不是跟jquery版本有关系,看来以后还是明确设置⼀下dataType ⽐较好。
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的⽤法总结详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()⼀,$.get(url,[data],[callback])说明:url为请求地址,data为请求数据的列表,callback为请求成功后的回调函数,该函数接受两个参数,第⼀个为服务器返回的数据,第⼆个参数为服务器的状态,是可选参数。
⽽其中,服务器返回数据的格式其实是字符串形势,并不是我们想要的json数据格式,在此引⽤只是为了对⽐说明复制代码代码如下:$.get("data.php",$("#firstName.val()"),function(data){$("#getResponse").html(data); }//返回的data是字符串类型);⼆,$.post(url,[data],[callback],[type])说明:这个函数跟$.get()参数差不多,多了⼀个type参数,type为请求的数据类型,可以是html,xml,json等类型,如果我们设置这个参数为:json,那么返回的格式则是json格式的,如果没有设置,就和$.get()返回的格式⼀样,都是字符串的复制代码代码如下:$.post("data.php",$("#firstName.val()"),function(data){$("#postResponse").html();},"json"//设置了获取数据的类型,所以得到的数据格式为json类型的);三,$.ajax(opiton)说明:$.ajax()这个函数功能强⼤,可以对ajax进⾏许多精确的控制,需要详细说明的请参照相关资料复制代码代码如下:$.ajax({url: "ajax/ajax_selectPicType.aspx",data:{Full:"fu"},type: "POST",dataType:'json',success:CallBack,error:function(er){BackErr(er);}});四,$.getJSON(url,[data],[callback])复制代码代码如下:$.getJSON("data.php",$("#firstName.val()"),function(jsonData){$("#getJSONResponse").html(jsonData.id);}//⽆需设置,直接获取的数据类型为json,所以调⽤时需要使⽤jsonData.id⽅式);When Ajax meets jQuery 基于AJAX的应⽤现在越来越多,⽽对于前台开发⼈员来说,直接和底层的HTTPRequest打交道⼜不是⼀件令⼈愉快的事情。
参数: optio ns返回值: xml HttpReq uest使用HTTP请求一个页面。
这是jque ry的低级ajax实现。
要查看高级抽象,见$.set、$.post等,这些方法更易于理解和使用。
但是功能上有限制(例如,没有错误处理函数)。
警告:如果数据类型指定为"scrip t",那么POST自动转化为GET方法。
(因为script会作为一个嵌入页面的script标签进行载入)$.ajax()函数返回它创建的XMLH ttpRequest对象。
在大部分情况下,你不需要直接操作此对象。
通常,这个XMLH ttpReq uest对象主要用于需要手动中断XMLH ttpRequest请求的时候。
注意:如果你指明了下面列出的数据类型,请确保服务端发送了正确的MIME响应类型(如. xml 的类型是"te xt/xml")。
错误的MIME类型能够导致脚本出现意想不到的问题。
请查看AJAX的范例来了解数据类型的更多信息。
$.ajax()函数需要一个参数,一个包含有键/值对的对象,用于初始化并操作请求对象。
在jQue ry 1.2版本中,如果你指明了一个JSONP回调函数,你就可以从其它的域中载入JSON类型的数据,写法类似于"myurl?callback=?" 。
jQuery会自动调用正确的方法名称来代替查询字符串,执行你指定的回调函数。
或者,你也可以指定jso np的数据类型的回调函数,此函数会自动添加到Ajax请求中。
参数选项:async(true) 数据类型: Boolean默认情况下,所有的请求都是异步发送的(默认为true)。
如果需要发送同步请求, 设置选项为false。
注意,同步请求可能会暂时的锁定浏览器, 当请求激活时不能进行任何操作。
beforeSe nd 数据类型: Functio n一个预处理函数用于在发送前修改XMLHttpReq uest对象,设置自定义头部等。
jqueryajax属性async(同步异步)⽰例在jquery的ajax中如果我们希望实现同步或者异步我们可以直接设置async发⽣为真或假即可true false,下⾯举⼏个jquery ajax同步和异步实例例1、jquery+ajax/" target="_blank">jquery ajax同步⽅式$.ajax({url : 'test.php',type : 'post',async: false,//使⽤同步的⽅式,true为异步⽅式data : {'act':'addvideo', 'videoname':videoname},//这⾥使⽤json对象success : function(data){//code here...},fail:function(){//code here...}});View Code例2 代码如下//javascriptfunction test(){var a= 1;$.ajax({type : 'GET',url : 'test.php',data : 'page=112',success:function(msg){alert(msg);a= msg;}})alert(a);}//test.phpsleef('5'); //休息五分钟echo 'in';/*这个程序运⾏情况是先打印1(a=1) 然后五秒过后打印 in根据这个情况就可以知道 jquery 的ajax的执⾏流程因为是异步调⽤以前就是这样给⼀个变量赋值不管怎么弄都是不对的。
最后就发现这个问题参数async改为false就为同步调⽤当ajax返回结果后程序才继续执⾏*/View Code在这⾥,async默认的设置值为true,这种情况为异步⽅式,就是说当ajax发送请求后,在等待server端返回的这个过程中,前台会继续执⾏ajax块后⾯的脚本,直到server端返回正确的结果才会去执⾏success,也就是说这时候执⾏的是两个线程,ajax块发出请求后⼀个线程和ajax块后⾯的脚本(另⼀个线程)例3$.ajax({type:"POST",url:"Venue.aspx?act=init",dataType:"html",success:function(result){ //function1()f1();f2();}failure:function (result) {alert('Failed');},}function2();View Code在上例中,当ajax块发出请求后,他将停留function1(),等待server端的返回,但同时(在这个等待过程中),前台会去执⾏function2(),也就是说,在这个时候出现两个线程,我们这⾥暂且说为function1() 和function2()。
ajax的实现方式
Ajax的实现方式有以下几种:
1. XMLHttpRequest对象:通过创建XMLHttpRequest对象来
实现Ajax请求,并使用该对象发送HTTP请求并接收响应数据。
2. Fetch API:Fetch API是一种现代的替代XMLHttpRequest
的方式,它提供了更简洁、灵活的API来进行Ajax请求。
3. jQuery Ajax:使用jQuery框架提供的Ajax方法,通过
$.ajax()、$.get()、$.post()等方法来发送Ajax请求。
4. Axios:Axios是一个基于Promise的HTTP客户端,可以在
浏览器和Node.js中发送Ajax请求,它提供了更简单、更强大、更可靠的API。
5. Vue.js的Axios插件:对Axios进行封装并作为Vue.js的插
件使用,在Vue.js项目中方便地发送Ajax请求。
6. AngularJS的$http服务:AngularJS提供了$http服务来发送Ajax请求,具有灵活的API和数据绑定功能。
无论使用哪种方式实现Ajax,都可以通过发送HTTP请求并
异步获取响应数据,从而实现页面的动态更新和交互。
JQuery中Ajax的操作完整例⼦Java软件开发中,后台中我们可以通过各种框架,像SSH等进⾏对代码的封装,⽅便我们对Java代码的编写,例如,Struts,SpringMVC对从前台到action的流程进⾏封装控制,使我们只需要进⾏⼀些简单配置就可以实现;⽽spring进⾏了对各种对象的管理进⾏封装,提供了AOP编程的⽅式,⼤⼤⽅便了我们;⽽hibernate和IBatis则是对JDBC代码进⾏封装,不需要我们每次都写那些重复⽽繁杂的JDBC代码。
前台呢,对于页⾯⼀些效果,验证等,我们都是通过JavaScript语⾔进⾏完成的,但是它也就像我们的Java代码⼀样,是最前台语⾔最基础的,⽽jQuery则是对js代码进⾏封装⽅便我们前台代码的编写,⽽且它还有⼀个⾮常⼤的优势就是解决了浏览器的兼容问题,这也是我们使⽤它⾮常重要的原因之⼀。
⽽现在为了满⾜⽤户的需求,Ajax(Asynchronous Javascript + XML)异步刷新起到了⽆可⽐拟的作⽤,以前写Ajax操作,总是需要我们想JDBC代码⼀样进⾏⼏个必备的步骤:AJAX——核⼼XMLHttpRequest对象,⽽JQuery也对Ajax异步操作进⾏了封装,这⾥看⼀下⼏种常⽤的⽅式。
$.ajax,$.post, $.get, $.getJSON。
⼀, $.ajax,这个是JQuery对ajax封装的最基础步,通过使⽤这个函数可以完成异步通讯的所有功能。
也就是说什么情况下我们都可以通过此⽅法进⾏异步刷新的操作。
但是它的参数较多,有的时候可能会⿇烦⼀些。
看⼀下常⽤的参数:var configObj = {method //数据的提交⽅式:get和posturl //数据的提交路劲async //是否⽀持异步刷新,默认是truedata //需要提交的数据dataType //服务器返回数据的类型,例如xml,String,Json等success //请求成功后的回调函数error //请求失败后的回调函数}$.ajax(configObj);//通过$.ajax函数进⾏调⽤。
jq的ajax语法
jq的ajax语法如下:
$.ajax({
url: "url地址", //请求的url地址
type: "GET", //请求方式,可以是GET或POST
data: {param1: 'value1', param2: 'value2'}, //请求参数,可以是对象或字符串
dataType: "json", //服务器返回的数据类型,可以是json、xml、html等
success: function(response) { //请求成功时的回调函数
console.log(response);
},
error: function(error) { //请求失败时的回调函数
console.log(error);
}
});
上述代码中,通过$.ajax()方法发起一个ajax请求。
其中的参数包括:
- url: 请求的url地址。
- type: 请求方式,可以是GET或POST。
- data: 请求参数,可以是对象或字符串。
- dataType: 服务器返回的数据类型,可以是json、xml、html等。
- success: 请求成功时的回调函数。
- error: 请求失败时的回调函数。
在success回调函数中,可以获取到服务器返回的数据,可以根据需要进行处理。
在error回调函数中,可以处理请求失败的情况。
一\~~~~(转)~~~\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("/yeer/archive/2009/06/10/ 1500682.html .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()说到的this alert(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 theserver, 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 triggeredevery time an Ajax request finishes.∙ajaxStop (Global Event)This global event is triggered if there are no more Ajax requests being processed. 具体的全局事件请参考API文档。