理解ajax

由于练手的demo用到了jquery封装的ajax,之前记录在本子上了,今天想整理一下~

1.ajax原理:
  • ajax的原理简单来说通过XmlHttpRequest对象来向服务器发送异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。
    这其中关键的一步是从服务器获得请求数据,要清除这个过程和原理。必须对XmlHttpRequest有所了解
  • XMLHttpRequest是一种支持异步请求的技术。也就是说javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。
  • ajax最大的优点在于不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网特内容
2.XMLHttpRequest的属性
  • onreadystatechange 每次状态改变所触发事件的事件处理程序

  • responseText 从服务器进程返回数据的字符串形式

  • responseXML 从服务器进程返回的DOM兼容的文档数据对象

  • status 从服务器返回的数字代码。 常见的有200 (已就绪) 404(未找到)

  • readyState 对象状态值

    • “0”(未初始化)对象已建立,尚未调用open方法
    • “1”(已初始化)对象已建立,已调用open方法,但尚未调用send方法
    • “2”(发送数据)send方法已被调用,但是当前的状态及http头未知
    • “3” (数据传送中) 已接收部分数据,但由于响应及http头不全,这时通过respondseXML和responseText获取部分数据会出现错误。
    • “4”(完成) 数据接收完毕,此时可以通过responseXML和responseText获取完整的回应数据。

3.XMLHttpRequest方法
  • send发送为POST请求

  • open(method,url,async)

    • method 定义了向服务器提交数据的类型 post/get
    • url 请求的url地址和传递的参数
    • async 传输方式 false为同步,true为异步
    • (如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作。我们需要根据实际需要来指定同步方式,在某些页面中,可能会发出多个请求,甚至是有组织有计划有队形大规模的高强度的request,而后一个是会覆盖前一个的,这个时候当然要指定同步方式。)

    get和post的区别

  • GET在浏览器回退时是无害的,而POST会再次提交请求。

  • GET产生的URL地址可以被Bookmark,而POST不可以。

  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。

  • GET请求只能进行url编码,而POST支持多种编码方式。

  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

  • GET请求在URL中传送的参数是有长度限制的,而POST没有。

  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

  • GET参数通过URL传递,POST放在Request body中。

GET和POST有一个重大区别:GET产生一个TCP数据包,而POST产生两个TCP数据包。
具体来说就是,对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
对于POST方式的请求,浏览器会先发送header,服务器响应100continue,浏览器再发送data,服务器响应200(返回数据)

这里强推一个写post和get区别的文章 https://www.oschina.net/news/77354/http-get-post-different?tdsourcetag=s_pctim_aiomsg

open()方法和send()方法的区别
参考 https://blog.csdn.net/nn131452zk/article/details/7762221

(1)用open可以指定get,post

  • 一般情况下,使用Ajax提交的参数多是些简单的字符串,可以直接使用GET方法将要提交的参数写到open方法的url参数中,此时send方法的参数为null。
    例如 :
    var url = “login.jsp?user=XXX&pwd=XXX”;
    xmlHttpRequest.open(“GET”,url,true);
    xmlHttpRequset.send(null);

(2)send发送为POST请求

  • 此 外,也可以使用send方法传递参数。使用send方法传递参数使用的是POST方法,需要设定Content-Type头信息,模拟HTTP POST方法发送一个表单,这样服务器才会知道如何处理上传的内容。参数的提交格式和GET方法中url的写法一样。设置头信息前必须先调用open方 法。
    例如:
    xmlHttpRequest.open(“POST”,“login.jsp”,true);
    xmlHttpRequest.setRequestHeder(“Content-Type”,“application/x-www-form-urlencoded;charset=UTF-8”);
    xmlHttpRequest.send(“user=”+username+"&pwd="+password);
4.jquery中的$.ajax
$.ajax({  
       type:'GET', //请求的类型,GET、POST等     
       url:'www.baidu.com',  //向服务器请求的地址。    
       contentType:'application/json', //向服务器发送内容的类型,默认值是:application/x-www-form-urlencoded
       dataType:'JSON',  //预期服务器响应类型   
       async:true, //默认值是true,表示请求是异步的,false是同步请求,同步请求会阻碍浏览器的其他操作(不建议使用)
       timeout:'5000', //设置本地的请求超时时间(单位是毫秒)    
       cache:true, //设置浏览器是否缓存请求的页面    
       success:function(result,status,XMLHttpRequest){//请求成功时执行的函数,result:服务器返回的数据,status:服务器返回的状态,                
       },
       error:function(xhr,status,error){  //请求失败时执行的函数                
       },
       complete:function(xhr,status){     //不管请求失败还是请求成功,都执行的函数                
       } 
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值