最近一直在搞基础的东西,做了一个持续更新的githubnote,大家可以去看看,诚意之作(原来是写给自己的。。。)链接地址:Front-End-Basics本文地址:Ajaxbasics相关基础笔记github地址:https://github.com/qiqihaobenben/Front-End-Basics,可以观看或star。正文开始...AjaxAsynchronousJavaScriptandXML:异步js和XML,一种前后端数据交互的技术。Ajax的优势在于传输和获取数据,无需跳转到页面,在该页面请求服务器实现实时验证。降低用户返工率,优化用户体验。GET方法将数据放在url中发送,主要步骤是获取数据1.创建一个ajax对象varajax=newXMLHttpRequest();2.传入请求参数//method,url,true参数ajax.open('get','php/get.php?user='+encodeURIComponent(value),true);3.发送数据ajax.send(null);send()方法传入一个参数,就是要作为请求体发送的数据。如果不需要通过请求体发送数据,则必须传入null,因为有些浏览器需要这个参数。注意第一点,get方式请求是有长度限制的。因为是通过地址栏中的查询信息来请求的。(即get通过url地址传输,post通过浏览器传输)2、请求信息显示在地址栏,直接暴露了用户填写的信息,访问的数据会被缓存由浏览器在历史记录中,所以说不安全。3.获取拼接数据时,使用encodeURIComponent包裹起来,否则在低版本IE浏览器中使用中文时会出现汉字乱码。encodeURIComponent('Liu')intourldecodeURIComponent('%E5%88%98')intoChinese4.存在缓存问题解决:在url?后面连接一个随机数,在send()中发送时间戳POST数据。步骤1.创建一个ajax对象varajax=newXMLHttpRequest();2.传入请求参数ajax.open('post','php/post.php',true);//method,url,三个参数的真正含义1、提交方式Form-method2、提交地址Form-action3、异步(synchronous)异步:非阻塞前面的代码不会影响后面代码的执行同步:阻塞前面的代码会影响后面代码的执行3.设置请求头ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded')//要成功发送请求对于header信息,必须在调用open()方法之后调用send()方法之前调用setRequestHeader()4.发送数据ajax.send('user=cfangxu')注意是post方式请求,理论上没有长度或大小限制,看具体浏览器和后台设置。数据通过http文本(requestbody-请求文本)发送,不会直接暴露用户信息,发送的数据也不会被浏览器缓存,相对安全。send()前需要设置请求头(不设置会报错)。post提交的数据格式有多种text/plainapplication/x-www-form-urlencoded-默认multipart/form-datapost提交数据时,需要设置请求头content-type:取值可以是其中之一以上三种1.ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');打开的时候不需要像get那样拼接数据,拼接数据填入send。接收数据的onload事件属于html5,存在兼容性问题ajax.onload=function(){//打印传输的数据console.log(ajax.responseText)}onreadystatechange事件支持IE6,兼容性好。其中readyState属性:请求状态0(未初始化),未调用open()方法,0未监听,1已启动,已调用open()方法。2发送,已经调用了send()方法,但是还没有收到响应。3Received,接收到部分对应数据。4完成,所有响应数据已经收到,可以在客户端使用。readyState:ajax工作状态onreadystatechange:readyState改变时触发status:服务器状态,http状态码responseText:返回以文本形式存储的内容ajax请求返回的内容存储在该属性下注意事件监听最好写在事件之前它发生了(即.onload(.onreadystatechange)应该放在.send之前),以避免不听。ExtendedXMLHttpRequestCompatibility问题,简单理解,可以直接跳过newXMLHttpRequest()ie6及以下不支持,所以需要使用插件newActiveXObject('MSXML2.XMLHTTP')IE中有三种不同的XHR版本:MSXML2.XMLHTTP,MSXML2.XMLHTTP.3.0,MSXML2.XMLHTTP.6.0因为只是为了理解,所以这里使用最旧的版本来兼容如下:varxhr=null;if(window.XMLHttpRequest){//不可能的直接用XMLHttpRequest判断即可,因为IE6下不可用,window.XMLHttpRequest会返回undefinedxhr=newXMLHttpRequest();}else{xhr=newActiveXObject('MSXML2.XMLHTTP');}也可以用try解决抓住。try{xhr=newXMLHttpRequest();}catch(e){xhr=newActiveXObject('MSXML2.XMLHTTP');}表单提交表单标签action的一些属性:数据提交的地址,默认为当前页面方法:数据提交默认是get方法1.get用=连接数据名和数据值,如果不止一个,那么他会把多个数据组合用&连接起来,然后把数据放到url?2.post通过请求头请求enctype:提交的数据格式,默认application/x-www-form-urlencoded上传文件,无论是form还是ajax,上传必须通过post传输要求。如果后台返回的内容是中文编码格式,直接在页面输入即可转换成中文。form
