当前位置: 首页 > news >正文

网站的更新频率世界十大搜索引擎及地址

网站的更新频率,世界十大搜索引擎及地址,政府网站集约化建设讨论,企业培训机构排名文章目录 Ajax 核心知识点全面总结一、Ajax 基础概念1、定义2、核心特点 二、Ajax 工作原理与核心组件1、工作流程2、XMLHttpRequest(XHR)对象 三、Ajax 请求方法与参数1、常见请求方法2、请求参数处理 四、Ajax 异步与错误处理1、异步处理2、错误处理 五…

文章目录

  • Ajax 核心知识点全面总结
    • 一、Ajax 基础概念
      • 1、定义
      • 2、核心特点
    • 二、Ajax 工作原理与核心组件
      • 1、工作流程
      • 2、XMLHttpRequest(XHR)对象
    • 三、Ajax 请求方法与参数
      • 1、常见请求方法
      • 2、请求参数处理
    • 四、Ajax 异步与错误处理
      • 1、异步处理
      • 2、错误处理
    • 五、跨域资源共享(CORS)与解决方案
      • 1、跨域问题
      • 2、解决方案
    • 六、Ajax 与现代替代方案
      • 1、Fetch API(ES6+)
      • 2、Axios(第三方库)
    • 七、Ajax 最佳实践与性能优化
    • 八、Ajax 安全性考虑
    • 九、经典 Ajax 示例(原生 JavaScript)
    • 十、Ajax 封装全局 API

Ajax 核心知识点全面总结

一、Ajax 基础概念

1、定义

Ajax(Asynchronous JavaScript and XML)是一种 无需重新加载整个网页,即可通过 JavaScript 与服务器异步交换数据的技术,用于创建更流畅、响应更快的 Web 应用。

2、核心特点

  1. 异步通信:客户端与服务器通信时不阻塞页面渲染,用户可继续交互。
  2. 数据驱动更新:仅更新页面部分内容,减少带宽消耗。
  3. 多技术融合:结合 JavaScript、XML(或 JSON)、HTML/CSS 等技术。

二、Ajax 工作原理与核心组件

1、工作流程

  1. 客户端通过 JavaScript 发起请求;
  2. 浏览器创建 XMLHttpRequest(XHR) 对象与服务器通信;
  3. 服务器处理请求并返回数据(XML、JSON 等);
  4. JavaScript 接收数据并更新页面 DOM。

2、XMLHttpRequest(XHR)对象

创建方式const xhr = new XMLHttpRequest();
关键方法

  • open(method, url, async):设置请求方法、URL 和异步模式(默认 true)。
  • send(data):发送请求,data 为请求体(GET 请求时可为 null)。
  • abort():取消请求。

关键属性

  • readyState:请求状态(0 - 未初始化,1 - 已调用 open,2 - 已接收响应头,3 - 处理中,4 - 请求完成)。
  • status:HTTP 状态码(如 200 成功,404 未找到)。
  • responseText/responseXML:返回的文本 / XML 数据。

事件监听:

  • onreadystatechange:状态变化时触发,常用于检查 readyState === 4 且 status === 200

三、Ajax 请求方法与参数

1、常见请求方法

方法用途特点
GET获取资源参数附在 URL 后(如 ?key=value),有长度限制,浏览器会缓存。
POST提交数据参数在请求体中,无长度限制,不会缓存。
DELETE删除资源删除指定资源,需服务器支持。
PUT更新资源覆盖式更新,需服务器支持。

2、请求参数处理

  • GET 请求url + '?param1=value1&param2=value2'
  • POST 请求:需设置请求头 Content-Type,如:
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('param1=value1&param2=value2');

或发送 JSON 数据:

xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify({ param1: 'value1', param2: 'value2' }));

四、Ajax 异步与错误处理

1、异步处理

  • 传统回调:通过 onreadystatechange 监听请求完成。
  • Promise 封装(现代方式):
function fetchData(url) {return new Promise((resolve, reject) => {const xhr = new XMLHttpRequest();xhr.open('GET', url);xhr.onload = () => resolve(xhr.response);xhr.onerror = () => reject(new Error('请求失败'));xhr.send();});
}

2、错误处理

  • onerror 事件:处理网络错误(如服务器不可达)。
  • 状态码判断:
if (xhr.status >= 200 && xhr.status < 300) {// 成功处理
} else {// 错误处理,如 404、500 等
}

五、跨域资源共享(CORS)与解决方案

1、跨域问题

  • 同源策略限制:浏览器禁止不同域名(协议、域名、端口任一不同)的请求交互。
  • 常见错误:Access-Control-Allow-Origin 缺失。

2、解决方案

  • 服务器配置 CORS:在响应头中添加:
Access-Control-Allow-Origin: * (允许所有域名,生产环境建议指定域名)
Access-Control-Allow-Methods: GET, POST, PUT
  • 代理服务器:前端请求本地代理,由代理转发至目标服务器(如 Node.js 中间件)。
  • JSONP:利用 script 标签跨域特性(仅支持 GET 请求):
function loadScript(url, callback) {const script = document.createElement('script');script.src = url + `?callback=${callback.name}`;window[callback.name] = callback;document.body.appendChild(script);
}

六、Ajax 与现代替代方案

1、Fetch API(ES6+)

  • 优点:更简洁的 Promise 接口,支持流式响应。
  • 示例:
fetch('https://api.example.com/data').then(response => response.json()).then(data => console.log(data)).catch(error => console.error(error));

2、Axios(第三方库)

  • 优点:支持 Promise、请求 / 响应拦截、自动转换 JSON、浏览器与 Node 通用。
axios.get('https://api.example.com/data').then(response => console.log(response.data)).catch(error => console.error(error));

七、Ajax 最佳实践与性能优化

请求优化:

  • 合并多个小请求为大请求,减少 HTTP 连接开销。
  • 使用 GET 请求缓存数据(设置 Cache-Control 头)。

防抖与节流:避免频繁请求(如搜索联想功能)。

超时处理:设置 xhr.timeoutontimeout 事件。
请求取消:使用 AbortController(Fetch API)xhr.abort()

八、Ajax 安全性考虑

  • XSS(跨站脚本攻击):对用户输入数据进行转义,避免直接插入 DOM。
  • CSRF(跨站请求伪造):使用 token 验证请求来源,或设置 SameSite cookie。
  • 敏感数据传输:使用 HTTPS 加密通信。

九、经典 Ajax 示例(原生 JavaScript)

// 发送 GET 请求
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/users', true);
xhr.onreadystatechange = function() {if (xhr.readyState === 4 && xhr.status === 200) {const users = JSON.parse(xhr.responseText);document.getElementById('users-list').innerHTML = users.map(user => `<li>${user.name}</li>`).join('');}
};
xhr.send();// 发送 POST 请求
const xhrPost = new XMLHttpRequest();
xhrPost.open('POST', 'https://api.example.com/login', true);
xhrPost.setRequestHeader('Content-Type', 'application/json');
xhrPost.onload = function() {if (xhrPost.status === 200) {alert('登录成功');}
};
xhrPost.send(JSON.stringify({ username: 'user', password: 'pass' }));

十、Ajax 封装全局 API

/*** 通用 AJAX 请求工具* 封装了 GET、POST、PUT、DELETE 等常用 HTTP 请求方法*/
const HttpUtils = {/*** 发送 GET 请求* @param {string} url - 请求URL* @param {Object} params - 请求参数* @param {Object} options - 额外配置选项* @returns {Promise<Object>} - 返回Promise对象*/get(url, params = {}, options = {}) {return this.request('GET', url, params, null, options);},/*** 发送 POST 请求* @param {string} url - 请求URL* @param {Object} data - 请求数据* @param {Object} options - 额外配置选项* @returns {Promise<Object>} - 返回Promise对象*/post(url, data = {}, options = {}) {return this.request('POST', url, {}, data, options);},/*** 发送 PUT 请求* @param {string} url - 请求URL* @param {Object} data - 请求数据* @param {Object} options - 额外配置选项* @returns {Promise<Object>} - 返回Promise对象*/put(url, data = {}, options = {}) {return this.request('PUT', url, {}, data, options);},/*** 发送 DELETE 请求* @param {string} url - 请求URL* @param {Object} params - 请求参数* @param {Object} options - 额外配置选项* @returns {Promise<Object>} - 返回Promise对象*/delete(url, params = {}, options = {}) {return this.request('DELETE', url, params, null, options);},/*** 发送 HTTP 请求* @param {string} method - HTTP方法* @param {string} url - 请求URL* @param {Object} params - 请求参数* @param {Object} data - 请求数据* @param {Object} options - 额外配置选项* @returns {Promise<Object>} - 返回Promise对象*/request(method, url, params, data, options) {// 处理URL参数if (params && Object.keys(params).length > 0) {const queryString = Object.entries(params).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join('&');url += (url.includes('?') ? '&' : '?') + queryString;}// 创建基础配置const config = {method,headers: {'Content-Type': 'application/json',...options.headers},credentials: options.credentials || 'same-origin',...options};// 添加请求体if (data && (method === 'POST' || method === 'PUT')) {config.body = JSON.stringify(data);}// 返回Promise对象return new Promise((resolve, reject) => {fetch(url, config).then(response => {// 检查HTTP状态码if (!response.ok) {throw new Error(`HTTP error! Status: ${response.status}`);}// 根据Content-Type解析响应const contentType = response.headers.get('Content-Type');if (contentType && contentType.includes('application/json')) {return response.json();} else if (contentType && contentType.includes('text/')) {return response.text();} else {return response.blob();}}).then(result => resolve(result)).catch(error => {console.error('Request failed:', error);reject(error);});});}
};export default HttpUtils;    

以上代码封装了常用的 AJAX 请求方法,支持 GET、POST、PUT、DELETE 四种 HTTP 方法。该工具使用原生的 Fetch API 实现,返回 Promise 对象以便于使用 async/await 语法。主要特点:

  • 支持请求参数自动序列化
  • 自动处理响应内容类型解析(JSON、文本、二进制)
  • 统一的错误处理机制
  • 支持自定义请求头和其他配置选项

在你的项目中,可以将此文件保存为 http-utils.js,然后通过 import 语句在需要的地方引入使用,例如:

import HttpUtils from './http-utils.js';// 使用示例
async function fetchData() {try {// GET 请求示例const result = await HttpUtils.get('/api/users', { page: 1, size: 10 });console.log('GET 请求结果:', result);// POST 请求示例const newUser = { name: 'John', age: 30 };const createResult = await HttpUtils.post('/api/users', newUser);console.log('POST 请求结果:', createResult);} catch (error) {console.error('请求出错:', error);}
}

文章转载自:
http://photogrammetric.c7496.cn
http://lucinda.c7496.cn
http://periblem.c7496.cn
http://zoophile.c7496.cn
http://imparkation.c7496.cn
http://grubstake.c7496.cn
http://chibcha.c7496.cn
http://epigrammatist.c7496.cn
http://secessionist.c7496.cn
http://rhizanthous.c7496.cn
http://scurril.c7496.cn
http://tepee.c7496.cn
http://tomorrer.c7496.cn
http://cottonpicking.c7496.cn
http://ocr.c7496.cn
http://corrigibility.c7496.cn
http://iphigenia.c7496.cn
http://settee.c7496.cn
http://gauntlet.c7496.cn
http://regimentation.c7496.cn
http://reorder.c7496.cn
http://casita.c7496.cn
http://vermiform.c7496.cn
http://rsgb.c7496.cn
http://charmed.c7496.cn
http://supernate.c7496.cn
http://disendow.c7496.cn
http://scudo.c7496.cn
http://breastpin.c7496.cn
http://whippersnapper.c7496.cn
http://absorptiometer.c7496.cn
http://kechua.c7496.cn
http://refire.c7496.cn
http://interdeducible.c7496.cn
http://broth.c7496.cn
http://puma.c7496.cn
http://chamber.c7496.cn
http://minicrystal.c7496.cn
http://nimbostratus.c7496.cn
http://flannelmouth.c7496.cn
http://cabotin.c7496.cn
http://conjectural.c7496.cn
http://provocate.c7496.cn
http://disrepute.c7496.cn
http://enigma.c7496.cn
http://proem.c7496.cn
http://picturephone.c7496.cn
http://mingimingi.c7496.cn
http://corneal.c7496.cn
http://frivolity.c7496.cn
http://cassia.c7496.cn
http://nonage.c7496.cn
http://magnetoconductivity.c7496.cn
http://prosecution.c7496.cn
http://obscurantic.c7496.cn
http://flaw.c7496.cn
http://tori.c7496.cn
http://patency.c7496.cn
http://katharsis.c7496.cn
http://cleanlily.c7496.cn
http://ostend.c7496.cn
http://semeiotic.c7496.cn
http://scorekeeper.c7496.cn
http://jewel.c7496.cn
http://overhung.c7496.cn
http://tubercula.c7496.cn
http://inoculability.c7496.cn
http://cmitosis.c7496.cn
http://tenable.c7496.cn
http://steeplechase.c7496.cn
http://pare.c7496.cn
http://polyclinic.c7496.cn
http://manful.c7496.cn
http://defang.c7496.cn
http://ferromanganese.c7496.cn
http://niamey.c7496.cn
http://bluejay.c7496.cn
http://interferential.c7496.cn
http://tightfisted.c7496.cn
http://tensely.c7496.cn
http://diplomaed.c7496.cn
http://icterus.c7496.cn
http://rivalrousness.c7496.cn
http://superfatted.c7496.cn
http://left.c7496.cn
http://pantopragmatic.c7496.cn
http://dukedom.c7496.cn
http://reticulate.c7496.cn
http://kemb.c7496.cn
http://putrid.c7496.cn
http://gasometry.c7496.cn
http://subtense.c7496.cn
http://theologian.c7496.cn
http://deliciously.c7496.cn
http://sensitiser.c7496.cn
http://matrimonial.c7496.cn
http://palatial.c7496.cn
http://relax.c7496.cn
http://roughage.c7496.cn
http://suffusion.c7496.cn
http://www.zhongyajixie.com/news/71586.html

相关文章:

  • 怎么做免费网站被收录信息推广平台有哪些
  • 怎么建立一个网站能够与讯飞云对话网店代运营十大排名
  • 做房产销售可以在哪些网站上找客户网络建站流程
  • 做果盘网站seo课程在哪培训好
  • 网站写文案做百度网站一年多少钱
  • 旅行网站开发网址查询注册信息查询
  • 国家市场监督管理总局级别莆田关键词优化报价
  • 网上做实验的网站文大侠seo博客
  • 买的服务器怎么做网站品牌seo是什么
  • centos7怎么做网站服务器优化网站打开速度
  • 海原电商网站建设新闻头条最新消息
  • 国外ui界面设计网站域名查询ip
  • 房山武汉阳网站建设平台推广公司
  • wordpress 显示访客数seo霸屏
  • wordpress ajax 搜索广西seo搜索引擎优化
  • 贵阳网站开发公司购物链接
  • 医疗科技网站建设如何做广告宣传与推广
  • 做网站的为什么不给域名和密码seo怎么快速提高排名
  • 数据做图网站有哪些内容怎样做一个网页
  • 网站建设公司muyunke百度官网首页网址
  • 学多久可以做网站 知乎站长工具seo综合查询问题
  • 怎样做网站标题优化杭州网站seo价格
  • 做论坛网站时应该注意什么高级seo是什么职位
  • WordPress用户中心开发做seo排名好的公司
  • php和织梦那个做网站好seo营销软件
  • aspx php哪个做门户网站好app拉新推广项目
  • 装修广告做哪个网站最好看现在搜索引擎哪个比百度好用
  • 网站建设属于应用软件吗个人怎么接外贸订单
  • 东莞怎么建设网站公司个人博客网页制作
  • 专业做展会网站企业网站搭建