首页 > 其他分享 >使用Ajax进行数据请求

使用Ajax进行数据请求

时间:2023-07-07 09:34:59浏览次数:36  
标签:obj 请求 data xhq xhr Ajax 数据

一、Ajax开源库有很多选择,大家可以根据需求自己选择

  1. jQuery:jQuery是一个广泛应用的JavaScript库,它提供了简洁而强大的API来处理Ajax请求。通过$.ajax()方法或其简化的$.get()$.post()方法,可以轻松地发送异步请求和处理服务器响应。

  2. Axios:Axios是一个基于Promise的现代化HTTP客户端,用于浏览器和Node.js。它提供了简洁的API来处理Ajax请求,支持并发请求、请求拦截、请求取消等功能,使用起来非常方便。

  3. Fetch API:Fetch API是一种现代的原生JavaScript API,用于发起网络请求。它提供了更直接的方式来发送Ajax请求,并且支持Promise,可以更方便地处理异步操作。

  4. Superagent:Superagent是一个流行的HTTP请求库,适用于浏览器和Node.js环境。它提供了链式调用的API,支持各种HTTP方法、文件上传、Cookie管理等功能。

  5. Axios、Fetch API和Superagent都是适用于浏览器和Node.js的通用HTTP请求库,支持跨平台使用。

这只是一小部分常用的Ajax开源库,根据具体需求和项目的特点,你还可以根据功能、性能、维护活跃度等因素选择其他合适的库来处理Ajax请求。甚至自己封装适用自己的Ajax。

二、以下是一个简单的Ajax进行数据请求的方法。

  1. 创建 XMLHttpRequest 对象:在JavaScript中,使用new XMLHttpRequest()来创建一个XMLHttpRequest对象。

  2. 设置请求的参数:使用open()方法设置HTTP请求的方法(GET或POST)和URL。例如,xhr.open('GET', 'http://example.com/data', true)表示使用GET方法发送请求到"http://example.com/data",第三个参数为true表示使用异步请求。

  3. 设置响应处理函数:使用onreadystatechange属性指定一个回调函数来处理服务器响应。可以通过判断readyStatestatus属性来确定请求的状态和是否成功。当readyState为4且status为200时表示请求成功,可以处理服务器返回的数据。

    xhr.onreadystatechange = function() {
      if (xhr.readyState === 4 && xhr.status === 200) {
        var response = JSON.parse(xhr.responseText); // 处理服务器返回的数据
        // ...
      }
    };
  4. 发送请求:使用send()方法发送请求。对于GET请求,可以将参数附加在URL上,例如,xhr.send(null);对于POST请求,可以将参数作为send()方法的参数发送,例如,xhr.send(data)
//完整的示例代码如下:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/data', true);

xhr.onreadystatechange = function() {
  if (xhr.readyState === 4 && xhr.status === 200) {
    var response = JSON.parse(xhr.responseText);
    // 处理服务器返回的数据
    // ...
  }
};

xhr.send(null);

 注意:由于跨域安全策略限制,Ajax请求只能向同源(即协议、域名和端口都相同)的服务器发送请求。如果需要向不同域的服务器发送Ajax请求,可以使用JSONP、CORS或使用代理服务器等方法解决跨域问题。

那么,如果上面的库你不会使用,甚至说不知道它的原始逻辑,那么,我来教你封装一个简单的Ajax吧,后面再根据自己的需求

            底层逻辑

//1.创建对象
let  xhq = new XMLHttpRequest()
//2.初始话http请求参数
xhq.open(methode, url, true)
//3.发送请求
xhq.send({
    username:'wzx'
})
//4.监听请求状态,执行对应的回调函数
xhq.onreadystatechange = function () {
    if ( xhq.readystate == 4 && xhq.status == 200 ) {
        // success 回调
        success(xhq.responseText)
    }  else if (xhq.readyState == 4 && xhq.status !== 200) {
        // error 回调
        error()
    }
}


//-----------完整实现-----------
function sendAjax(obj) {
    function splicStr(data) {// get方式传入时,将内容进行data内容进行拼接
        var str = ''
        for (var i in data) {
            str = i + '=' + data[i]
        }
        return str
    }

    原生Ajax实现

// 原生ajax实现 步骤分析
// 一、声明XMLHttpRequest, 为了兼容IE5、6需要使用ActiveXObject()
    let xhq = new XMLHttpRequest() // 创建对象
// 二、初始化HTTP请求参数, 只初始化并不会发送
    if (obj.method.toUpperCase() === 'GET') { // get方法
        xhq.open(obj.method, obj.url + '?' + splicStr(obj.data),  typeof obj.async === 'boolean'? obj.async : true) // 路径拼接
        xhq.send()// 三、发送此次请求
    }
    else if (obj.method.toUpperCase() === 'POST') { // post方法
        xhq.open(obj.method, obj.url, typeof obj.async === 'boolean'? obj.async : true)
        xhq.setRequestHeader("content-type","application/x-www-form-urlencoded") // 以表单提交
        xhq.send(obj.data)// 三、发送此次请求
    }
//四、监听发送
    xhq.onreadystatechange = function () {
        if ( xhq.readyState == 4 && xhq.status == 200 ) {
            // success 回调
            success(xhq.responseText)
        } else if (xhq.readyState == 4 && xhq.status !== 200) {
            // error 回调
            error()
        }
    }
}
//使用
sendAjax({
    url: 'your url',
    method: 'post',
    async: true,
    data: {
        username: 'xiong',
        pwd: '123'
    },
    success: function (data) {
        console.log(data)
    },
    error: function () {
        console.log('发生了错误')
    }
})

再次注意:由于跨域安全策略限制,Ajax请求只能向同源(即协议、域名和端口都相同)的服务器发送请求。如果需要向不同域的服务器发送Ajax请求,可以使用JSONP、CORS或使用代理服务器等方法解决跨域问题。

标签:obj,请求,data,xhq,xhr,Ajax,数据
From: https://www.cnblogs.com/ml-blog/p/Ajax.html

相关文章

  • 推荐一个下载股票相关数据的库——tuhsare
    大家好,我是皮皮。一、前言这个事情还得从前几天在Python白银群【厚德载物】问了一个Python股票网络爬虫的问题说起,因为这个股票数据抓取的问题,引发了大家激烈的探讨,以致于后来大佬们纷纷参与进来。二、实现过程这里【袁学东】分享了一个tushare库,处理股票数据的专业库来着。......
  • ARIMA模型,ARIMAX模型预测冰淇淋消费时间序列数据|附代码数据
    全文下载链接:http://tecdat.cn/?p=22511最近我们被客户要求撰写关于ARIMAX的研究报告,包括一些图形和统计输出。标准的ARIMA(移动平均自回归模型)模型允许只根据预测变量的过去值进行预测。该模型假定一个变量的未来的值线性地取决于其过去的值,以及过去(随机)影响的值。ARIMAX模型......
  • R语言和Python用泊松过程扩展:霍克斯过程Hawkes Processes分析比特币交易数据订单到达
    全文下载链接:http://tecdat.cn/?p=25880 最近我们被客户要求撰写关于泊松过程的研究报告,包括一些图形和统计输出。本文描述了一个模型,该模型解释了交易的聚集到达,并展示了如何将其应用于比特币交易数据。这是很有趣的,原因很多。例如,对于交易来说,能够预测在短期内是否有更多的买......
  • 【慢慢买嗅探神器】基于scrapy+pyqt的电商数据爬虫系统
    项目预览项目演示代码部分爬虫模块GUI......
  • 数据结构(算法)【7月6日】
    一、算法的基本概念:1、算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。2、算法的特性:(1)有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成;【算法是有穷的,程序是无穷的】(2)确定性:算法中每条指令必须有确切的含义,......
  • 基础大模型能像人类一样标注数据吗?
    自从ChatGPT出现以来,我们见证了大语言模型(LLM)领域前所未有的发展,尤其是对话类模型,经过微调以后可以根据给出的提示语(prompt)来完成相关要求和命令。然而,直到如今我们也无法对比这些大模型的性能,因为缺乏一个统一的基准,难以严谨地去测试它们各自的性能。评测我们发给它们......
  • 携手华南理工大学培育数据库人才,“巨杉数据库管理与应用奖学金”颁奖仪式隆重举行
    巨杉数据库作为新一代国产分布式数据库的领军者,长期致力于高校人才培养,近期在为华南理工大学学子颁发专项奖学金,为培育国产数据库及金融科技人才发力。近期,巨杉数据库奖学金颁奖仪式在华南理工大学举办。该奖学金由巨杉数据库设立,旨在表彰华南理工大学的优秀学子,产学研联合推动分......
  • Linux中常用数据库管理系统之MariaDB
    我们生活在信息化时代,经常要跟数据打交道,它在我们的日常生活中无处不在,比如手机支付,微信聊天,淘宝购物,使用的这些在后台都会对应一个叫数据库的存在。数据库就是存储这些数据资料的仓库,那么这些数据是如何被管理的呢?今天我们就来一起了解下数据库管理系统。所谓数据库管理系统,就这......
  • Linux中常用数据库管理系统之MariaDB
    我们生活在信息化时代,经常要跟数据打交道,它在我们的日常生活中无处不在,比如手机支付,微信聊天,淘宝购物,使用的这些在后台都会对应一个叫数据库的存在。数据库就是存储这些数据资料的仓库,那么这些数据是如何被管理的呢?今天我们就来一起了解下数据库管理系统。所谓数据库管理系统,就这......
  • Linux中常用数据库管理系统之MariaDB
    我们生活在信息化时代,经常要跟数据打交道,它在我们的日常生活中无处不在,比如手机支付,微信聊天,淘宝购物,使用的这些在后台都会对应一个叫数据库的存在。数据库就是存储这些数据资料的仓库,那么这些数据是如何被管理的呢?今天我们就来一起了解下数据库管理系统。所谓数据库管理系统,就这......