ajax post请求怎么传参_高级前端:详解手写原生Ajax的实现

2023-05-16

点击上方“ 前端印象 ”,选择“ 设为星标 ” 第一时间关注技术干货!

对于Ajax,肯定很多小伙伴都听过甚至用过了,那么没听过的也不用着急,本文会对Ajax进行讲解,其次,一定还有一些人只用过JQuery封装好了的Ajax却对原生的Ajax并不了解,那么也不用着急,本文从最基本的Ajax开始讲起,然后最后会尽可能得模仿JQuery对其进行封装,让我刚才提到的两类人能对Ajax有进一步的了解。

一、什么是Ajax

Ajax(Asynchronous JavaScript And XML)是2005年新出现的技术,它的出现是为了解决这样一个场景:整个页面中,只有一小部分的数据需要进行更新,按照传统的前后端交互,我们需要向服务器请求该网页的所有数据,然后再在客户端重新渲染,这无疑是非常低效的操作。因此,Ajax就可以做到只向服务器请求我们想要的那一小部分数据,而不用请求全部数据,进而在刷新整个页面的前提下更新那部分的数据。

举个例子,我们去饭店吃饭,然后点了一桌子菜,后来发现其中有一道菜太咸了,因此我们只需要让服务员端回去给厨师重新做这一道菜再拿回来就行了。

在这个例子中的人、物对比Ajax的关系如下表:

吃饭事件数据更新
我们客户端
菜品页面所有的数据
服务员ajax对象
厨师服务器

当我们发现有一道菜太咸了,不需要让厨师把所有的菜重新做一遍,只要让服务员拿这一道菜回去给厨师重做这一操作就相当于让ajax对象向后端请求那一小部分数据再拿回来更新页面而无需刷新整个页面。

二、Ajax的优缺点

了解了Ajax的作用和定义,我们再来看看它的优缺点

(1)优点

  1. 浏览器默认支持(一般浏览器都是支持JavaScript的)
  2. 提高用户体验(不需要刷新整个页面,而只需要局部刷新)
  3. 提高页面的性能(只需要请求部分数据,所以数据量就明显下降了)

(2)缺点

  1. 破坏了浏览器的前进和后退功能(Ajax不会改变网页URL,因此不会在浏览器记录前后页面)
  2. 对搜索引擎的支持较弱(搜索引擎无法监测到JS引起的数据变化)

三、Ajax的使用

Ajax的基本流程:创建XHR对象 => 发送数据 => 接收数据

(1)状态码

既然Ajax涉及到前后端的数据交互,那么我们就先来简单的看一下几种类型的状态码,如下表:

状态码含义
100 ~ 199连接继续
200 ~ 299各种成功的请求
300 ~ 399重定向
400 ~ 499客户端错误
500 ~ 599服务端错误

(2)xhr的基本使用

在使用xhr之前,我们要创建一个xhr的实例对象

let xhr = new XMLHttpRequest()

然后再调用xhr对象上的 open() 方法,表示创建一个请求。

open() 方法接收三个参数:

  • 第一个参数: 请求的类型(例如get 、post)
  • 第二个参数: 请求的URL
  • 第三个参数: 是否异步发送请求(默认为true)
// 创建了一个Ajax请求
xhr.open('get', 'example.php', 'true')

光调用了 open() 方法还不够,它只是创建了一个请求,但还没有发送请求,因此我们还要调用xhr对象上的另一个方法,即 send() 方法,表示将请求发送给目标URL

send() 方法接收一个参数:

  • 第一个参数: 作为请求主体发送的数据(例如post请求携带的数据)
// 我们上面创建的是get请求,因此send()方法无需传参
xhr.send()

请求发送出去后,客户端需要接收服务器响应回来的数据,xhr对象中有一些属性,它们存储着服务端返回来的一些数据信息,如下表所示

属性名含义
responseText服务端返回的文本信息
responseXML服务端返回的XML DOM文档
statusHTTP状态码
statusTextHTTP状态码说明
readyStatexhr对象的请求响应阶段

既然我们要获取服务端返回的数据,我们就要知道服务端是何时返回数据的,这就可以通过上面表格中的 readyState 属性来判断了

readyState 属性一共有5个值,分别表示不同的请求响应阶段:

  • 0: 还未创建请求,即未调用 open() 方法
  • 1: 已调用 open() 方法,但未发送 send() 方法
  • 2: 已调用 send() 方法,但未接收到响应
  • 3: 已接收到部分响应
  • 4: 已接收到全部的响应

同时,xhr对象可以绑定一个 readystatechange 事件,每当 readyState 属性发生改变,都会触发该事件,因此,该事件在一次请求中会被多次触发

xhr.onreadystatechange = function() {
 console.log('readyState属性发生改变了')
}

所以,我们可以在 readystatechange 事件中判断一下 readyState 属性是否为 4,即是否已经接收所有的响应,然后还可以再继续判断一下 status 属性,看看状态码是否为 200,当上述都成立了,我们再去 responseText 属性 或 responseXML 属性中获取响应数据

xhr.onreadystatechange = function() {
 // 判断是否已接收所有响应
 if(xhr.readyState === 4) {
  // 判断状态码是否为200
  if(xhr.status === 200) {
   console.log(xhr.responseText)
  }
 }
}

(3)发送get请求

上面也讲解了Ajax请求的简单应用,同时也是拿 get 请求来举得例子,因此这里我就不多做说明,唯一要讲的就是,get请求所携带的数据是明文的,大小只有4k左右,而且它是写在URL的 ? 后面的,例如这样 example.php?query=4&em=0,所以若是我们要在发送get请求时携带数据,只需要在调用 open() 方法时,将数据写在第二个参数的URL的 ? 后面即可

直接来写一次完整的 get 请求,代码如下:

let xhr = new XMLHttpRequest()
xhr.open('get', 'example.php?query=4&em=0')
xhr.send()
xhr.onreadystatechange = function() {
    if(xhr.readyState === 4) {
        if(xhr.status === 200){
            console.log(xhr.responseText);
        }
    }
}

(4)发送post请求

发送post请求的过程几乎和get请求一样,唯一不一样的是数据的传递。大家都知道post请求的数据是放在请求体中的,因此我们需要调用xhr对象上的 setRequestHeader() 方法来模仿表单提交时的内容类型

该方法传入的参数比较固定,代码如下

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

然后我们上面也说过,send() 方法接收的一个参数是请求主体发送的数据,所以我们的post请求要发送的数据就要作为该方法的参数,代码如下:

xhr.send('query=4&em=0')

那我们来看一次完整的post请求是怎么样的吧,代码如下:

let xhr = new XMLHttpRequest()
xhr.open('post', 'example.php')
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
xhr.send('query=4&em=0')
xhr.onreadystatechange = function() {
    if(xhr.readyState === 4) {
        if(xhr.status === 200){
            console.log(xhr.responseText);
        }
    }
}

四、封装Ajax

文章开头提到,JQuery早已对Ajax请求进行了成熟的封装,所以我们可以借鉴它,甚至尽可能地去模仿它进行封装,在这之前,我们得先了解JQuery中Ajax的使用

(1)JQuery中的Ajax

这里我找来了几段使用JQuery发送Ajax请求的代码,如下所示:

  • 发送get请求
$.get('example.php', {query: 4, em: 0}, function(data, status, xhr) {
 console.log(`
  返回的数据为${data}
  返回的状态为${status}
  返回xhr对象为${xhr}
 `)
}, 'json')

这段代码发送了一个 get 请求,携带的参数有 query 值为 4 、em 值为 0,规定返回的数据类型为 json,同时设定了一个回调函数用于接收请求返回的数据、状态和xhr对象

  • 发送post请求
$.post('example.php', {query: 4, em: 0}, function(data, status, xhr) {
 console.log(`
  返回的数据为${data}
  返回的状态为${status}
  返回xhr对象为${xhr}
 `)
}, 'json')

这段代码发送了一个 post 请求,携带的参数有 query 值为 4 、em 值为 0,规定返回的数据类型为 json,同时设定了一个回调函数用于接收请求返回的数据、状态和xhr对象

  • 综合方法
// 该方法既可以发送get请求又可以发送post请求
$.ajax({
 url: 'example.php', // 请求的URL
 type: 'get', //请求类型,若为post,则表示发送post请求
 data: {query: 4, em: 0},     // 请求携带数据
 dataType: 'json',  // 接收的数据类型
 isAsync: true     // 是否异步请求
})
.then(data => {
 console.log(`请求成功,数据为${data}`)
})
.catch(err => {
 console.log(`请求失败,状态为${err}`)
})

其调用的是一个综合的方法,传入的参数是一个对象,对象中传入多个参数。这段代码是发送了一个 get 请求,地址为 example.php,携带的参数有 query 值为 4 、em 值为 0,所接收返回数据的类型为 json,请求为异步请求

特别的是,该方法的回调函数是通过 promise 实现的,即该方法返回一个 promise 对象,在 then 函数中处理请求成功的情况,在 catch 函数中处理请求失败的情况

若没有了解过 promise 的小伙伴建议先花几分钟了解一下,因为这是异步编程最常用的一个语法,下面放上文章链接——深入了解Promise对象,写出优雅的回调代码,告别回调地狱

接下来我们就针对上述给出的例子,逐个封装

(2)封装准备工作

因为 XMLHttpRequest 对象有一定的兼容性,因此我们在封装ajax方法之前可以先封装一个方法用来动态创建一个兼容性稍微好点的XHR对象(其中主要是兼容IE5和IE6)

我们都知道JQuery都是将方法封装在一个名为 $ 的对象中的,我们也这么做

let $ = {
 createXHR: function() {
  // 若浏览器支持,则创建XMLHttpRequest对象
  if(window.XMLHttpRequest) {
   return new XMLHttpRequest()
  } 
  // 若不支持,则创建ActiveXobject对象
  else {
   return new ActiveXObject()
  } 
 }
}

(3)封装$.get方法

首先查阅JQuery的 get 方法可知,其接收四个参数:URLdatacallbackdataType,分别表示请求的url地址、携带的参数、成功回调函数、返回数据的类型

let $ = {
 // 动态生成XHR对象的方法
 createXHR: function() {
  if(window.XMLHttpRequest) {
   return new XMLHttpRequest()
  } else {
   return new ActiveXObject()
  } 
 },
 get: function(url, data, callback, dataType) {
  // 避免dataType大小写的问题
  let dataType = dataType.toLowerCase()
  // 如果有传入data,则在url后面跟上参数
  if(data) {
   url += '?'
   Object.keys(data).forEach(key => url += `${key}=${data[key]}&`)
   url = url.slice(0, -1)
  }
  // 调用我们封装的方法生成XHR对象
  let xhr = this.createXHR()
  // 创建get请求
  xhr.open('get', url)
  // 发送请求
  xhr.send()
  xhr.onreadystatechange = function() {
   if(xhr.readyState === 4) {
    if(xhr.status >= 200 && xhr.status 300 || xhr.status == 304) {
     // 若dataType为json,则将返回的数据通过JSON.parse格式化
     let res = dataType === 'json' ? JSON.parse(xhr.responseText) : xhr.responseText
     // 调用回调函数,并把参数传进去
     callback(res, xhr.status, xhr)
    }
   }
  }
 },
}

(4)封装$.post方法

JQuery的 post 方法传入的参数跟 get 方法一样,只不过其内部的实现有略微的区别,就是携带参数的发送不一样,所以直接来看代码吧

let $ = {
 // 动态生成XHR对象的方法
 createXHR: function() {
  if(window.XMLHttpRequest) {
   return new XMLHttpRequest()
  } else {
   return new ActiveXObject()
  } 
 },
 post: function(url, data, callback, dataType) {
  // 避免dataType大小写的问题
  let dataType = dataType.toLowerCase()
  // 调用我们封装的方法动态生成XHR对象
  let xhr = this.createXHR()

  let str = ''
  // 若传入参数,则将参数序列化
  if(data) {
   Object.keys(data).forEach(key => str += `${key}=${data[key]}&`)
   str = str.slice(0, -1)
  }
  // 设置头部信息
  xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
  // 发送请求,并携带参数
  xhr.send(str)
  xhr.onreadystatechange = function() {
   if(xhr.readyState === 4) {
    if(xhr.status >= 200 && xhr.status 300 || xhr.status == 304) {
     // 若dataType为json,则将返回的数据通过JSON.parse格式化
     let res = dataType === 'json' ? JSON.parse(xhr.responseText) : xhr.responseText
     // 调用回调函数,把对应参数传进去
     callback(res, xhr.status, xhr)
    }
   }
  }
 }
}

(5)封装$.ajax方法

在JQuery中还有一个 ajax 方法,其既可以发送 get 请求,也可以发送 post 请求,该方法可传入多种参数,且支持 promise 处理回调函数

let $ = {
 createXHR: function() {
  if(window.XMLHttpRequest) {
   return new XMLHttpRequest()
  } else {
   return new ActiveXObject()
  } 
 },
 ajax: function(params) {
  // 初始化参数
  let type = params.type ? params.type.toLowerCase() : 'get'
  let isAsync = params.isAsync ? params.isAsync : 'true'
  let url = params.url
  let data = params.data ? params.data : {}
  let dataType = params.dataType.toLowerCase()
  // 用我们封装的方法动态生成XHR对象
  let xhr = this.createXHR()
  
  let str = ''
  
  // 拼接字符串
  Object.keys(data).forEach(key => str += `${key}=${data[key]}&`)
  str = str.slice(0, -1)
  // 如果是get请求就把携带参数拼接到url后面
  if(type === 'get') url += `?${str}`;
  // 返回promise对象,便于外部then和catch函数调用
  return new Promise((resolve, reject) => {
   // 创建请求
   xhr.open(type, url, isAsync)
   
   if(type === 'post') {
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-rulencoded')
    xhr.send(str)
   } else {
    xhr.send()
   }

   xhr.onreadystatechange = function() {
    if(xhr.readyState === 4) {
     if(xhr.status >= 200 && xhr.status 300 || xhr.status == 304) {
      let res = dataType === 'json' ? JSON.parse(xhr.responseText) : xhr.responseText
      resolve(res) // 请求成功,返回数据
     } else {
      reject(xhr.status) // 请求失败,返回状态码
     }
    }
   }
  }) 
 }
}

五、Ajax的约束

默认情况下,Ajax一般只能向同源的域发送请求,这是受到了浏览器的同源策略的限制,关于同源策略,你们可以去看一下我以前写过的一篇博客,里面写了同源策略的定义以及解决方案——前端人员都懂的浏览器的同源策略,以及如何进行不同源间的相互访问

了解过同源策略以后,我们来看看如何让Ajax不受同源策略的限制而成功发送请求。CORS(跨域资源共享)要求我们在发送请求时自定义一个HTTP头部与服务器进行沟通,我们只需要设置一个名为 Origin 的头部,值为当前页面的源信息(协议、域名、端口),例如Origin : http://example.com ;然后服务器需要设置一个名为 Access-Control-Allow-Origin 的响应头部,其值为允许跨域访问的源信息,若服务器设置的 Access-Control-Allow-Origin 与我们设置的 Origin 相同,则表示服务器允许我们跨域请求其资源,或者服务器可以将 Access-Control-Allow-Origin 值设为 *,此时表示允许任何域向其发送请求并且不受同源策略的限制。

现在的大部分浏览器几乎都支持了在发送Ajax请求后,自动向请求头部添加当前的源信息

六、结束语

建议你们好好了解JS的Ajax的使用,这样在面试中问起来你还能说出个一二三,并且有时候面试官还会直接让你亲手写一个简单的Ajax请求呢,而不会让你使用JQuery的。看了本文,想必面试官如果让你当场封装一个类似JQuery的Ajax请求,你也不会手足无措呢

  b85aa8f15ad9faf627b3a233da7936f7.png

END

支持三连

1.看到这里了就点个在看支持下吧,你的在看是我创作的动力。

2.关注公众号人生不止有技术「一起交流进步」

3.关注公众号回复【加群】,拉你进技术交流群一起玩转前端。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ajax post请求怎么传参_高级前端:详解手写原生Ajax的实现 的相关文章

  • 为什么这个 jquery 代码不能在黑莓上运行?

    我正在使用 jquerymobile 开发phonegap 应用程序 但在黑莓 9780 中它没有向我显示警报 我的代码是 document addEventListener deviceready run false function r
  • 底部页脚的 css 布局,动态 ajax 内容更改页面高度

    Update 实际上 我现在通过放弃固定页脚设计来解决这个问题 动态内容移动页脚并适当调整容器大小似乎没有问题 除非页脚最初固定在浏览器底部 我希望其他人最终能够提供一个兼具两全其美的出色解决方案 I spent all day tryin
  • 使用 AJAX 获取发布数据

    我正在尝试从 Wordpress 帖子 AJAX 中提取内容 我已经在下面列出了迄今为止我的努力 加载的脚本 wp enqueue script my ajax request get stylesheet directory uri js
  • 使用 AJAX 和 Jquery 自动完成功能填充表单数据

    我想使用自动完成所选项目来填写表单数据 我的自动完成工作正常 但我无法弄清楚如何通过从自动完成文本框中检索项目来填写表单数据 这是我的代码 HttpPost public JsonResult GetAutocomplete string
  • json_encode 创建格式错误的 JSON 数据?

    我有一个 codeigniter 应用程序将一些数据从数据库返回到视图 我正在尝试将其作为 json 数据发送回来 问题是返回的数据格式错误 它看起来像这样 2 5 Admin1 2 10 Admin2 当我在 jsonlint com 上
  • ajax 会增加还是降低安全性?

    我正在创建一个网站 到目前为止它是纯 PHP 的 我在想 既然很少有人没有启用 JavaScript 我想知道为什么 也许我应该将我的网站创建为一个完全 PHP 的网站 而不使用任何 AJAX 难道是我想错了 可以肯定的是 如果我实施一些
  • 如何将 STRUCT - OR - JSON 传递给 Coldfusion CFC 方法

    我有一个现有的 CFC 在将结构传递到方法中时可以正常工作 问题是 我们现在还需要通过 JSON 将数据传递到同一函数中 这是 CFC 片段
  • ASP.Net MVC AJAX 链接不起作用

    为了实现 AJAX 登录 我在我的页面上有这个链接 附近有一个 id 为 lll 的 div 当我单击该链接时 我得到了无聊的确认 只是出于调试目的而添加 没有它的行为是相同的 但然后什么也没有发生 没有请求到达服务器 因为我在 LogOn
  • PHP、jQuery 和 Ajax 调用乱序

    我正在使用 jQuery 进行 Ajax 调用 我有 x 数量的 Ajax 调用附加到 div 这些 Ajax 加载请求是由 PHP foreach 循环生成的 问题是它们渲染的顺序不正确 它们被设置在数组中
  • 使用 MVC 5 和实体框架的 jQuery 数据表

    我需要一些关于在控制器中放入什么内容的指导 以便我可以对 jQuery 数据表使用服务器端处理 我正在使用 MVC 5 和实体框架 示例位于 http datatablesmvc codeplex com documentation htt
  • 请参阅 Java EE eclipse 调试中的 POST 参数

    我在调试 Java EE 方面没有经验 我更像是一个 javascript 人 我需要查看哪些 HTTP POST 参数到达服务器端 我在表单将其操作指向的 jsp 文件中放置了一个断点 现在我在调试变量窗口中找不到 POST 内容 他们在
  • wordpress - 像 stackoverflow 中那样内嵌 ajax 注释

    我有一个 WordPress 博客 希望为人们提供与 stackoverflow 中添加评论相同的用户体验 有很多评论 ajax 插件 但我找不到一个可以使用的插件 它允许您在主页上内联 进入并添加评论 而无需先深入到单独的单个帖子页面 任
  • 在 JQuery 中发布表单并填充 DIV - 在 IE 中损坏

    我正在尝试创建一个通过 jQuery 发布数据并将返回值填充到同一 DIV 中的表单 这样页面就不会在发布操作时刷新 div div
  • 使用 WCF 支持“application/x-www-form-urlencoded”发布数据的最佳方式?

    我正在基于 W3C 规范构建 WCF 服务 该规范定义了接受 application x www form urlencoded 发布数据的 RESTful Web 服务端点 默认情况下 WCF 不支持这种类型的消息编码 我发现了许多创建如
  • 将查询字符串添加到 Ajax url 调用

    我想知道当我们调用 Jquery Ajax 时是否可以将查询字符串与 URL 一起传递 例子 ajax type POST url index php task addNewInfo data regForm serialize dataT
  • Ajax文件上传

    我想使用 Ajax 和 php 上传文件 我有一个表格
  • 在 Android 中使用 DataOutputStream 在 POST 正文中发送特殊字符 (ë ä ï)

    我目前正在开发一个具有大量服务器端通信的 Android 应用程序 昨天 我收到一份错误报告 称用户无法发送 简单 特殊字符 例如 我搜索过但没有找到任何有用的东西 可能重复 没有答案 https stackoverflow com que
  • 动态速度计 javascript 或 jquery 插件

    我希望有动态ajax插件在页面上显示速度计 一个想法是我设置一个背景并旋转针 有人知道相关插件吗 这里有一些供您参考 http bernii github com gauge js http bernii github com gauge
  • 使用异步调用时如何从 javascript 更新元刷新?

    我有一个系统 它使用元刷新来注销页面 该系统会在空闲用户后进行清理 不用担心 服务器也会导致会话超时 我开始通过 ajax 进行一些操作 不是真正的 xml 但这不是重点 我可以运行从异步请求返回的javascript 所以我想知道是否可以
  • 如何使用 jquery ajax 将锚点的值发送到 php

    我正在尝试使用 jquery 将几个锚点的值发送到 php 文件 但我没有从 php 脚本中得到回调 div class result div a href value class star Star 5 a a href value cl

随机推荐

  • #ifndef详解

    ifndef 是 34 if not defined 34 的简写 xff0c 是预处理功能 xff08 宏定义 文件包含 条件编译 xff09 当中的条件编译 xff0c 可以根据是否已经定义了一个变量来进行分支选择 xff0c 其作用是
  • vue中watch的用法总结以及报错处理Error in callback for watcher "checkList"

    首先确认 watch是一个对象 xff0c 一定要当成对象来用 对象就有键 xff0c 有值 键 xff1a 就是你要监控的那个家伙 xff0c 比如说 route xff0c 这个就是要监控路由的变化 xff0c 或者是data中的某个变
  • 京东物流青龙系统分享

    QQ空间 腾讯朋友 新浪微博 人人网 开心网 微信 QQ好友 腾讯微博 浏览 xff1a 1102 2015年 xff0c 中国的大电商平台格局已定 xff0c 各大平台开始重视的方向已经从过去的价格战转向最后一公里和O2O的布局了 移动电
  • 彻底解决DZ大附件上传问题

    2012 4 13日更新 xff1a 因为这篇文章是很早以前写的了 xff0c 很多朋友看到了之后向我咨询大附件的问题 xff0c 但是以下部分信息已经失效 xff0c 如需了解这个问题的最新解决方案 xff0c 可以加我的QQ群 xff1
  • 前端经典面试题CSS三栏布局

    对于前端来说 xff0c 布局也是必须掌握的 xff0c 一个好的布局可以让页面看起来更美观 提到布局 xff0c 那就不得不说CSS三栏布局 这是前端面试经常会问到的一个问题 xff0c 算是基础题 所谓的三栏布局 xff0c 一般是指左
  • xmanager 注册码及评估期已过的解决办法

    注册信息 用户 xff1a admin 企业 xff1a microsoft Xshell4 0注册码 xff1a 690313 111999 999313 Xftp 4 0注册码 xff1a 101210 450789 147200 Xs
  • ntoj 808 蚂蚁的难题(八)

    蚂蚁的难题 八 时间限制 xff1a 2000 ms 内存限制 xff1a 65535 KB 难度 xff1a 5 描述 蚂蚁是一个古玩爱好者 xff0c 他收藏了很多瓶瓶罐罐 有一天 xff0c 他要将他的宝贝们一字排开 xff0c 摆放
  • CentOS 7尝试安装 phpstudy

    安装方法 xff08 phpstudy for linux V0 2公测版 xff09 使用 SSH 连接工具 连接到您的 Linux服务器后 xff0c 根据系统执行相应命令开始安装 xff08 大约2分钟完成面板安装 xff09 xff
  • asp.net 2.0中傻瓜式使用soap header

    在websevrice 中 soap header是十分重要的哦 xff0c 主要是安全性的考虑 xff0c 在asp net 2 0中 可以简单地应用soap header来 进行傻瓜式的应用 xff0c 更复杂的应用当然要更深入地去看了
  • Linux操作系统中对于NTFS读取目录功能的实现

    1 2 We use the same basic approach as the old NTFS driver i e we parse the 3 index root entries and then the index alloc
  • matlab练习程序(演化策略ES)

    还是这本书上的内容 xff0c 不过我看演化计算这一章是倒着看的 xff0c 这里练习的算法正好和书中介绍的顺序是相反的 演化策略是最古老的的演化算法之一 xff0c 和上一篇DE算法类似 xff0c 都是基于种群的随机演化产生最优解的算法
  • 火狐浏览器无法打开

    解决火狐浏览器无法打开的问题 xff1a 第一种方法 请先检查一下任务管理器中有没有火狐的进程 xff08 firefox exe xff09 xff0c 有的话 xff0c 请在任务管理器中强行关闭它 xff0c 然后试试用safe mo
  • 快上车项目简介(500字)

    第8组 快上车 xff0c 这是一款日常生活中非常有趣的安卓手机软件 xff0c 致力于打造一个大学生的专属娱乐创意社区 xff0c 讨论的话题轻松休闲贴近大学生活 xff0c 与在社会中十分流行的贴吧 xff0c 糗事百科类似 在快上车中
  • 挂载硬盘,提示 mount: unknown filesystem type 'LVM2_member'的解决方案

    问题现象 xff1a 由于重装linux xff0c 并且加了固态硬盘 xff0c 直接将系统装在固态硬盘中 启动服务器的时候 xff0c 便看不到原来机械硬盘的挂载目录了 xff0c 不知如何访问机械硬盘了 直接用命令 mount dev
  • 对目前市面上WPF书的浅薄感受

    目前市面上 WPF的书籍 xff0c WPF揭秘 人民邮电出版社 深入解析 WPF编程 电子工业出版社 xff0c WPF程序设计指南 电子工业出版社 WPF高级编程 清华大学出版社 我购买了前面三本 xff0c 简单的对前面三本说一些浅薄
  • 麒麟操作系统配置web服务器,银河麒麟服务器设置

    银河麒麟服务器设置 内容精选 换一换 鲲鹏软件栈汇聚各种鲲鹏兼容软件 xff0c 帮助开发者了解如何将软件移植到鲲鹏上运行 xff0c 获取操作指导和工具 来自 xff1a 其他 对于业务量访问较大的业务 xff0c 可以通过ELB设置相应
  • 技术岗的职业规划_剪辑师该如何做好职业规划?

    各位点进来的小伙伴 xff0c 我猜你们在22 28岁之间吧 这是我们人生中最迷茫最不知所措的年龄段 刚大学毕业发现学的专业跟实际工作起来相差甚远 xff0c 茫然失措 工作几年后 xff0c 猛然发现每日的工作内容都差不多 xff0c 毫
  • debian11的PVE应用

    1 在debian11中安装pve7之后 xff0c 新建虚拟机安装openeuler 启动时报错 xff1a TASK ERROR start failed QEMU exited with code 1 可以把这一段 39 kvm ig
  • cvc 降噪_你买的“降噪”耳机真的是你想要的降噪吗?

    降噪 这一个高大上得词 xff0c 在你们眼中是不是非常的有效 xff0c 面对公共交通工具热播剧外放 xff0c 街道上车水马龙的轰鸣 xff0c 咖啡厅孩子们的喧嚣 xff0c 噪音其实一直都在我们的身边 xff0c 无处不在 xff0
  • ajax post请求怎么传参_高级前端:详解手写原生Ajax的实现

    点击上方 前端印象 xff0c 选择 设为星标 第一时间关注技术干货 xff01 对于Ajax xff0c 肯定很多小伙伴都听过甚至用过了 xff0c 那么没听过的也不用着急 xff0c 本文会对Ajax进行讲解 xff0c 其次 xff0