原生JavaScrpit中异步请求Ajax实现方法

前端之家收集整理的这篇文章主要介绍了原生JavaScrpit中异步请求Ajax实现方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在前端页面开发的过程中,经常使用到Ajax请求,异步提交表单数据,或者异步刷新页面

一般来说,使用Jquery中的$.ajax,$.post,$.getJSON,非常方便,但是有的时候,我们只因为需要ajax功能而引入Jquery比较不划算。

所以接下来便用原生JavaScrpit实现一个简单的Ajax请求,并说明ajax请求中的跨域访问问题,以及多个ajax请求的数据同步问题。

JavaScript实现Ajax异步请求

简单的ajax请求实现

Ajax请求的原理是创建一个XMLHttpRequest对象,使用这个对象来进行异步发送请求,具体实现参考下面代码

-1 ? requestUrl = requestUrl + '&' + query_string : requestUrl = requestUrl + '?' + query_string; // GET 请求参数放在URL中,将requestData置为空 requestData = null; } // ajax 请求成功之后的回调函数 xhr.onreadystatechange = function () { // readyState=4表示接受响应完毕 if (xhr.readyState == ("number" == typeof XMLHttpRequest.DONE ? XMLHttpRequest.DONE : 4)) { if (200 == xhr.status) { // 判断状态码 var response = xhr.response || xhr.responseText || {}; // 获取返回值 // if define success callback,call it,if response is string,convert it to json objcet console.log(response); option.success && option.success(response); // 调用成功的回调函数处理返回值 // 可以判断返回数据类型,对数据进行JSON解析或者XML解析 // option.success && option.success('string' == typeof response ? JSON.parse(response) : response); } else { // if define error callback,call it option.error && option.error(xhr,xhr.statusText); } } }; // 发送ajax请求 xhr.open(requestMethod,requestUrl,true); // 请求超时的回调 xhr.ontimeout = function () { option.timeout && option.timeout(xhr,xhr.statusText); }; // 定义超时时间 xhr.timeout = option.timeout || 0; // 设置响应头部,这儿默认设置为json格式,可以定义为其他格式,修改头部即可 xhr.setRequestHeader && xhr.setRequestHeader('Content-Type','application/json;charset=utf-8'); xhr.withCredentials = (option.xhrFields || {}).withCredentials; // 这儿主要用于发送POST请求的数据 xhr.send(requestData); }

上面的代码中有详细的注释,ajax的原理很简单,总的来说就是使用XMLHttpRequest对象来发送数据。这儿对这个对象进行补充说明。

代码中用了很多布尔表达式的短路特性代替条件语句的写法,善用布尔表达式的短路特性能让大量简单的条件语句简化。^_^

XMLHttpRequest对象的基本属性

readyState属性有五个状态值:

0:是uninitialized:未初始化。已经创建了XMLHttpRequest对象但是未初始化。

1:是loading:已经开始准备好要发送了。

2:是loaded,:已经发送,但是还没有收到响应。

3:是interactive:正在接受响应,但是还没接收完。

4:是completed:接受响应完毕。

responseText:服务器返回的响应文本。只有当readyState>=3的时候才有值。当readyState=3,返回的响应文本不完整,只有readyState=4,接收到完整的响应文本。 responseXML:响应信息是xml,可以解析为Dom对象。 status:服务器的Http状态码,若是200,则表示OK,404,表示为未找到。 statusText:服务器http状态码的文本。比如OK,Not Found。

XMLHttpRequest对象的基本方法

open(method,url,asyn):打开XMLHttpRequest对象。其中method方法有get,post,delete,put。url是请求资源的地址。第三个参数表示是否使用异步。默认情况是true,因为Ajax的特点就是异步传送。若使用同步则false。 send(body):发送请求Ajax。其中发送的内容可以是需要的参数,若是没有参数,直接send(null)

使用方法

直接调用上面定义的ajax函数,传送相应的选项和参数即可。

PHP',data: { name: 'uusama',desc: 'smart' },method: 'GET',success: function(ret) { console.log(ret); } });

跨域请求问题

使用ajax请求的时候,一定要注意一个问题:跨域请求。 在没有使用特殊手段的情况下,跨域请求:请求其他域名和端口下的URL资源的时候,会报 Access-Control-Allow-Origin 相关的错误。其主要原因是浏览器的同源策略限制,浏览器规定不能跨域请求资源。

解决办法

下面简单的提一下一些解决方案。 在ajax头部添加允许跨域请求的header,这种方式还需要服务端配合添加允许跨域请求的头部才可以。下面是PHP添加允许POST请求跨域头部的PHP示例:

使用动态scrpit标签,动态创建一个scrpit标签并指向请求的地址的方法,也就是JSONP方式,需要在URL后面拼接一个回调函数标签加载成功以后会调用回调函数

-1 ? '&' : '?') + 'callback=' + callbaclName; document.body.appendChild(script);

回调函数需要设置为全局函数

多个ajax请求数据同步问题

单个ajax返回数据异步处理

多个ajax请求互不相关,它们在被调用以后发送各自请求,请求成功以后调用自己的回调方法,互不影响。 因为ajax请求异步的特性,所有一些依赖于请求完成之后的操作我们都需要放在回调函数内部,否则的话,你在回调函数外面读取到的值是空。看下面的例子:

PHP?id=1',success: function(ret) { result = ret; } }); console.log(result); // 输出 null

虽然我们在回调函数里面设置了result的值,但是在最后一行 console.log(result); 输出为空。 因为ajax请求是异步的,程序执行到最后一行的时候,请求并没有完成,值并没有来得及修改。 这儿我们应该把 console.log(result) 相关的处理,放在 success 回调函数中才可以。

多个ajax返回数据问题

如果有多个ajax请求,情况会变得有些复杂。 如果多个ajax请求是按照顺序执行的,其中一个完成之后,才能进行下一个,则可以把后面一个请求放在前一后请求的回调中。 比如有两个ajax请求,其中一个请求的数据依赖于另外一个,则可以在第一个请求的回调里面再进行ajax请求:

PHP?id=1',success: function(ret1) { // 第一个请求成功回调以后,再请求第二个 if (ret1) { ajax({ url: '/get2.PHP?id=4',success:function(ret2) { console.log(ret1); console.log(ret2) } }) } } }); // 也可以写成下面的形式 var ajax2 = function(ret1) { ajax({ url: '/get2.PHP?id=4',success:function(ret2) { console.log(ret1); console.log(ret2) } }); }; ajax({ url: '/get1.PHP?id=1',success: function(ret1) { if(ret1){ ajax2(ret1); } } });

如果不关心不同的ajax请求的顺序,而只是关心所有请求都完成,才能进行下一步。 一种方法是可以在每个请求完成以后都调用同一个回调函数,只有次数减少到0才执行下一步。

0) { count--; // 可以在这儿保存 ret 到全局变量 all_ret.push(ret); return; } else { // 调用三次以后 // todo console.log(ret); } }

另一种方法是设置一个定时任务去轮训是否所有ajax请求都完成,需要在每个ajax的成功回调中去设置一个标志。 这儿可以用是否获得值来判断,也可以设置标签来判断,用值来判断时,要注意设置的值和初始相同的情况。

PHP?id=1',success:function(ret) { all_ret['ret1'] = ret; // 设置第一个ajax请求完成,把结果更新 } }); ajax({ url: '/get2.PHP?id=1',success:function(ret) { all_ret['ret2'] = ret; // 设置第二个ajax请求完成,把结果更新 } }); ajax({ url: '/get3.PHP?id=1',success:function(ret) { all_ret['ret3'] = ret; // 设置第三个ajax请求完成,把结果更新 } }); var repeat = setInterval(function(){ // 循环检查是否所有设置的ajax请求结果的值是否都已被更改,都已被更改说明所有ajax请求都已完成 for(var item in all_ret) { if (all_ret[item] === null){ return; } } // todo,到这儿所有ajax请求均已完成 clearInterval(repeat); },50);

PS:下面看下ajax异步请求实例代码,具体代码如下所示:

<Meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 获得书籍列表@H_<a href="/tag/404/" target="_blank" class="keywords">404</a>_119@ <script type="text/javascript"> var xmlhttp; var txt,x,xx,i; function loadXMLDoc(url,cfunc) { if(window.XMLHttpRequest) { // code for IE7+,Firefox,Chrome,Opera,Safari xmlhttp = new XMLHttpRequest(); } else { // code for IE6,IE5 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = cfunc; xmlhttp.open("GET","<%=request.getContextPath()%>"+url,true); xmlhttp.send(); } function myFunction1() { loadXMLDoc("/xmls/books.xml",function(){ if(xmlhttp.readyState==4 && xmlhttp.status==200) { var xmlDoc = xmlhttp.responseXML; txt = ""; x = xmlDoc.getElementsByTagName_r("title"); for(i=0;i<x.length;i++) { txt = txt + x[i].childNodes[0].nodeValue+"<br/>"; } document.getElementByIdx_x("myDiv").innerHTML = txt; } }); } function myFunction2() { loadXMLDoc("/text/test1.txt",function(){ if(xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementByIdx_x("myDiv").innerHTML = xmlhttp.responseText; } }); } function myFunction3() { loadXMLDoc("/xmls/cd_catalog.xml",function(){ if(xmlhttp.readyState==4 && xmlhttp.status==200) { txt="<table border='1'><tr><th>Title</th><th>Artist</th></tr>" x= xmlhttp.responseXML.documentElement.getElementsByTagName_r("CD"); for(i=0;i<x.length;i++) { txt = txt + "<tr>"; xx = x[i].getElementsByTagName_r("TITLE"); { try{ txt = txt + "<td>" + xx[0].firstChild.nodeValue +"</td>"; } catch(er) { txt = txt +"<td></td>"; } xx = x[i].getElementsByTagName_r("ARTIST"); try { txt = txt + "<td>" + xx[0].firstChild.nodeValue +"</td>"; } catch(er) { txt = txt + "<td></td>"; } } txt = txt + "</tr>" } txt = txt + "</table>"; document.getElementByIdx_x("myDiv").innerHTML =txt; } }); } </script> </head> <body> <h2>My Book Collection:</h2> <button type="button" onClick="myFunction1()">获得我的图书收藏列表</button> <button type="button" onClick="myFunction2()">这是不同的请求</button> <button type="button" onClick="myFunction3()"><a href="/tag/huoqu/" target="_blank" class="keywords">获取</a>CD信息</button> <div id="myDiv"></div> </body> </html></pre> </div> <p><h3>总结</h3></p> <p>以上所述是小编给大家介绍的原生JavaScrpit中异步请求Ajax<a href="/tag/shixianfangfa/" target="_blank" class="keywords">实现方法</a>。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可<a href="/tag/fenxiang/" target="_blank" class="keywords">分享</a>给好友!感谢<a href="/tag/zhichi/" target="_blank" class="keywords">支持</a>。</p></div> <div class="topcard-tags"><a href="/tag/ajaxp/" class="tag_link" target="_blank">ajax</a><a href="/tag/jsp/" class="tag_link" target="_blank">js</a><a href="/tag/yibuqingqiu/" class="tag_link" target="_blank">异步请求</a></div> <ul class="list-group"> <li class="list-group-item"><a href="/ajax/35631.html" title="原生JS实现Ajax跨域请求flask响应内容">上一篇:原生JS实现Ajax跨域请求flask响应内</a><a href="/ajax/35152.html" title="原生JavaScript实现Ajax异步请求" class="text-muted pull-right">下一篇:原生JavaScript实现Ajax异步请求</a> </li> </ul> </div> </div> </div> <!-- row end --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-4605373693034661" data-ad-slot="9144498553"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script></div> </div> </div> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <div class="title"><h1>猜你在找的Ajax相关文章</h1></div> <div class="list_con"> <a href="/ajax/995195.html" title="网页的异步请求(Ajax)"><div class="title">网页的异步请求(Ajax)</div> <div class="summary">JS原生Ajax操作(XMLHttpRequest) GET请求 POST请求 兼容性问题 利用iframe模拟ajax 实现表...</div> <time class="summary">作者:前端之家 时间:2021-01-14</time> </a> </div> <div class="list_con"> <a href="/ajax/992908.html" title="手动实现AJAX"><div class="title">手动实现AJAX</div> <div class="summary">AJAX 每日更新前端基础,如果觉得不错,点个star吧 &#128515; https://github.com/Win...</div> <time class="summary">作者:前端之家 时间:2020-12-19</time> </a> </div> <div class="list_con"> <a href="/ajax/992023.html" title="axios异步提交表单数据的不同形式"><img class="lazy" src="/images/np.jpg" data-original="/res/2020/12-12/21/2c69f9c8b1929806fd861e6309bec705.png" title="" width="160" height="90" style="float:right;margin-left:30px;display:none;" /><div class="title">axios异步提交表单数据的不同形式</div> <div class="summary">踩坑Axios提交form表单几种格式 前后端分离的开发前后端, 前端使用的vue,后端的安全模块使...</div> <time class="summary">作者:前端之家 时间:2020-12-12</time> </a> </div> <div class="list_con"> <a href="/ajax/881610.html" title="php的ajax简单实例"><div class="title">php的ajax简单实例</div> <div class="summary">很早就听闻ajax的名声,但是却一直不知道怎么用,今天自己捣鼓了一下,竟然会用了,哈哈哈...</div> <time class="summary">作者:前端之家 时间:2020-11-11</time> </a> </div> <div class="list_con"> <a href="/ajax/881257.html" title="Json与Ajax(注册实例)"><div class="title">Json与Ajax(注册实例)</div> <div class="summary">需要在服务器上进行哈 jquery的ajax方法: // jquery请求 $.ajax({ url: &quot;./serv...</div> <time class="summary">作者:前端之家 时间:2020-11-07</time> </a> </div> <div style="border-bottom: 1px solid #f4f4f4;margin-top:20px;"> <ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-fr-2o+fp-dx-wx" data-ad-client="ca-pub-4605373693034661" data-ad-slot="4561116489"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div><div class="list_con"> <a href="/ajax/881219.html" title="jSon和Ajax登录功能,ajax数据交互案例"><div class="title">jSon和Ajax登录功能,ajax数据交互案例</div> <div class="summary">ajax实例,检测用户与注册 检测用户名是否被占用: 在用户填写完用户名之后,ajax会异步向...</div> <time class="summary">作者:前端之家 时间:2020-11-07</time> </a> </div> <div class="list_con"> <a href="/ajax/880192.html" title="关于AjaxControlToolkit的样式问题"><div class="title">关于AjaxControlToolkit的样式问题</div> <div class="summary">网(LieHuo.Net)教程 技术文章一直都是转载的,从来没有自创过.终于遇到AjaxControlToolkit,...</div> <time class="summary">作者:前端之家 时间:2020-11-04</time> </a> </div> <div class="list_con"> <a href="/ajax/880189.html" title="一个简单的AJAX实现(HELLO AJAX)"><div class="title">一个简单的AJAX实现(HELLO AJAX)</div> <div class="summary">客户端部分: <html> <head> <meta http-equiv="Content-Type" ...</div> <time class="summary">作者:前端之家 时间:2020-11-04</time> </a> </div> <div class="list_con"> <a href="/ajax/880188.html" title="AJAX中文乱码的两类问题及解决之策"><div class="title">AJAX中文乱码的两类问题及解决之策</div> <div class="summary">1)发送路径中的参数有中文,在服务器段接收参数值是乱码 例如: var url=”a.jsp?na...</div> <time class="summary">作者:前端之家 时间:2020-11-04</time> </a> </div> <div class="list_con"> <a href="/ajax/880154.html" title="实例:AJAX返回xml代码如何在网页中显示"><div class="title">实例:AJAX返回xml代码如何在网页中显示</div> <div class="summary">建站学院(LieHuo.Net)文档 今天来学习一篇实例代码教程:AJAX返回xml代码如何在网页中显...</div> <time class="summary">作者:前端之家 时间:2020-11-04</time> </a> </div> <div style="border-bottom: 1px solid #f4f4f4;margin-top:20px;"> <ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-fr-2o+fp-dx-wx" data-ad-client="ca-pub-4605373693034661" data-ad-slot="4561116489"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div></div> </div> </div> </div> <!-- left end--> <!-- right --> <div class="col-sm-12 col-md-12 col-lg-3"> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <label class="main-content-label ">编程分类</label> <div class="cate mt-20"><a href="/html/" title="HTML">HTML</a><a href="/html5/" title="HTML5">HTML5</a><a href="/js/" title="JavaScript">JavaScript</a><a href="/css/" title="CSS">CSS</a><a href="/jquery/" title="jQuery">jQuery</a><a href="/bootstrap/" title="Bootstrap">Bootstrap</a><a href="/angularjs/" title="Angularjs">Angularjs</a><a href="/typescript/" title="TypeScript">TypeScript</a><a href="/vue/" title="Vue">Vue</a><a href="/dojo/" title="Dojo">Dojo</a><a href="/json/" title="Json">Json</a><a href="/electron/" title="Electron">Electron</a><a href="/nodejs/" title="Node.js">Node.js</a><a href="/extjs/" title="extjs">extjs</a><a href="/express/" title="Express ">Express </a><a href="/xml/" title="XML">XML</a><a href="/es6/" title="ES6">ES6</a><a href="/ajax/" title="Ajax">Ajax</a><a href="/flash/" title="Flash">Flash</a><a href="/unity/" title="Unity">Unity</a><a href="/react/" title="React">React</a><a href="/flex/" title="Flex">Flex</a><a href="/antdesign/" title="Ant Design">Ant Design</a><a href="/webfrontend/" title="Web前端">Web前端</a><a href="/weapp/" title="微信小程序">微信小程序</a><a href="/wxmp/" title="微信公众号">微信公众号</a><div class="clearfix"></div> </div> </div> </div> </div> <!-- row end --> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <!-- f2er-rightads --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-4605373693034661" data-ad-slot="7756441254" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> </div> <!-- row end --> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <label class="main-content-label ">最新文章</label> <ul class="n-list"><li><a href="/ajax/995195.html" title="网页的异步请求(Ajax)" target="_blank">• 网页的异步请求(Ajax)</a></li> <li><a href="/ajax/992908.html" title="手动实现AJAX" target="_blank">• 手动实现AJAX</a></li> <li><a href="/ajax/992023.html" title="axios异步提交表单数据的不同形式" target="_blank">• axios异步提交表单数据的不</a></li> <li><a href="/ajax/881610.html" title="php的ajax简单实例" target="_blank">• php的ajax简单实例</a></li> <li><a href="/ajax/881257.html" title="Json与Ajax(注册实例)" target="_blank">• Json与Ajax(注册实例)</a></li> <li><a href="/ajax/881234.html" title="Ajax基础原理与应用" target="_blank">• Ajax基础原理与应用</a></li> <li><a href="/ajax/881219.html" title="jSon和Ajax登录功能,ajax数据交互案例" target="_blank">• jSon和Ajax登录功能,ajax</a></li> <li><a href="/ajax/880192.html" title="关于AjaxControlToolkit的样式问题" target="_blank">• 关于AjaxControlToolkit的</a></li> <li><a href="/ajax/880189.html" title="一个简单的AJAX实现(HELLO AJAX)" target="_blank">• 一个简单的AJAX实现(HELLO</a></li> <li><a href="/ajax/880188.html" title="AJAX中文乱码的两类问题及解决之策" target="_blank">• AJAX中文乱码的两类问题及</a></li> </ul> </div> </div> </div> <!-- row end --> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <label class="main-content-label ">热门标签 <span class="pull-right tx-12"> <a href="/all" target="_blank">更多 ►</a></span> </label> <div class="topcard-tags"><a href="/tag/guanbiyangao/" title="关闭广告" target="_blank">关闭广告</a><a href="/tag/danduheaders/" title="单独headers" target="_blank">单独headers</a><a href="/tag/fengzhuangdaima/" title="封装代码" target="_blank">封装代码</a><a href="/tag/tishicuowu/" title="提示错误" target="_blank">提示错误</a><a href="/tag/zhengshuzhengze/" title="整数正则" target="_blank">整数正则</a><a href="/tag/fei0kaitou/" title="非0开头" target="_blank">非0开头</a><a href="/tag/tiaoye/" title="跳页" target="_blank">跳页</a><a href="/tag/chuyema/" title="出页码" target="_blank">出页码</a><a href="/tag/antdtable/" title="antd table" target="_blank">antd table</a><a href="/tag/tishiURLweizhuce/" title="提示URL未注册" target="_blank">提示URL未注册</a><a href="/tag/gongzhonghaozhifu/" title="公众号支付" target="_blank">公众号支付</a><a href="/tag/vuehashmoshi/" title="vue hash模式" target="_blank">vue hash模式</a><a href="/tag/iSlider/" title="iSlider" target="_blank">iSlider</a><a href="/tag/chepaijianpan/" title="车牌键盘" target="_blank">车牌键盘</a><a href="/tag/xunhuantupian/" title="循环图片" target="_blank">循环图片</a><a href="/tag/echartsshuangzhexian/" title="echarts 双折线" target="_blank">echarts 双折</a><a href="/tag/zuoyoubuju/" title="左右布局" target="_blank">左右布局</a><a href="/tag/DllPlugin/" title="DllPlugin" target="_blank">DllPlugin</a><a href="/tag/duixiangchuangjian/" title="对象创建" target="_blank">对象创建</a><a href="/tag/daziyouxi/" title="打字游戏" target="_blank">打字游戏</a><a href="/tag/quanxuan/" title="圈选" target="_blank">圈选</a><a href="/tag/lianglan/" title="两栏" target="_blank">两栏</a><a href="/tag/yunhanshu/" title="云函数" target="_blank">云函数</a><a href="/tag/mengban/" title="蒙版" target="_blank">蒙版</a><a href="/tag/ES2020/" title="ES2020" target="_blank">ES2020</a><a href="/tag/chuchuang/" title="橱窗" target="_blank">橱窗</a><a href="/tag/wufenggundonglunbo/" title="无缝滚动轮播" target="_blank">无缝滚动轮播</a><a href="/tag/sekuaipengzhuang/" title="色块碰撞" target="_blank">色块碰撞</a><a href="/tag/zujianxiaohui/" title="组件销毁" target="_blank">组件销毁</a><a href="/tag/wendangcaozuo/" title="文档操作" target="_blank">文档操作</a></div> </div> </div> </div> <!-- row end --> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <!-- f2er-rightads --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-4605373693034661" data-ad-slot="7756441254" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> </div> <!-- row end --> </div> <!-- right end --> </div> </div> <footer id="footer"> <div class="container"> <div class="row hidden-xs"> <dl class="col-sm-6 site-link"> <dt>最近更新</dt><dd><a href="/win11/1005328.html" title="小米手机重装系统价格多少?专业维修服务详解" target="_blank">· 小米手机重装系统价格多少?专业维修服务详解</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005327.html" title="手把手教你重装电脑系统,让你的电脑焕然一新!" target="_blank">· 手把手教你重装电脑系统,让你的电脑焕然一新!</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005326.html" title="教你一步步重装XP系统,让你的电脑重获新生" target="_blank">· 教你一步步重装XP系统,让你的电脑重获新生</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005325.html" title="从备份到上网:一步步教你重装电脑系统" target="_blank">· 从备份到上网:一步步教你重装电脑系统</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005324.html" title="Sony笔记本电脑一键重装系统详细图文教程" target="_blank">· Sony笔记本电脑一键重装系统详细图文教程</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005323.html" title="Lenovo笔记本重装系统超详细教程,小白也能轻松上手" target="_blank">· Lenovo笔记本重装系统超详细教程,小白也能轻松...</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005322.html" title="联想笔记本一键重装Win10系统详细教程" target="_blank">· 联想笔记本一键重装Win10系统详细教程</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005321.html" title="电脑系统故障无需愁,专业维修店帮你重装旧貌换新颜" target="_blank">· 电脑系统故障无需愁,专业维修店帮你重装旧貌换新...</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005320.html" title="联想笔记本一键重装Win10系统图文教程,小白也能轻松搞定!" target="_blank">· 联想笔记本一键重装Win10系统图文教程,小白也能...</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005319.html" title="笔记本重装系统图文教程:从光盘启动一步到位" target="_blank">· 笔记本重装系统图文教程:从光盘启动一步到位</a><span class="text-muted pull-right">02-05</span></dd> </dl> <dl class="col-sm-4 site-link"> <dt>好站推荐</dt><dd> <a href="https://www.runoob.com" title="菜鸟教程(www.runoob.com)提供了编程的基础技术教程, 介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP , MySQL等各种编程语言的基础知识。 同时本站中也提供了大量的在线实例,通过实例,您可以更好的学习编程。" target="_blank">菜鸟教程</a></dd><dd> <a href="https://www.jb51.cc" title="编程之家(www.jb51.cc)是成立于2017年面向全球中文开发者的技术内容分享平台。提供编程导航、编程问答、编程博文、编程百科、编程教程、编程工具、编程实例等开发者最需要的编程技术内容与开发工具支持,与你一起学习编程,相信编程改变未来!" target="_blank">编程之家</a></dd><dd> <a href="" title="前端之家 f2er.com 前端开发人员所需学习知识手册。" target="_blank">前端之家</a></dd></dl> <dl class="col-sm-2 site-link"> <dt>商务合作</dt> <dd><a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=76874919&site=qq&menu=yes">联系我们</a></dd> </dl> </div> <div class="copyright"> Copyright © 2019 前端之家. 当前版本 V7.0.16<br> <span class="ml5">前端之家 版权所有 <a href="https://beian.miit.gov.cn/" target="_blank" rel="nofollow">闽ICP备13020303号-10</a></span> </div> </div> </footer> <script type="text/javascript" src="/js/base.js"></script> </body> </html>