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

js之原生ajax、Jquery-$.ajax、自定义ajax(post请求、get请求)

目录

    • 一、发送请求四个步骤
      • 1.open(method,url)
      • 2.requestHeader(属性名称, 属性值)
      • 3.send()设置发送的数据,开始和服务器端交互
      • 4.接收响应,获取数据
    • 二、原生get请求
    • 三、原生post请求
    • 四、JQuery-$.ajax
      • 1 ajax请求(通用请求)
      • 2 get 请求
      • 2 post 请求
    • 五、自定义$.ajax


ajax: 浏览器和服务器数据交互的网页技术 异步的xml和javascript

下文中会用到qs这个序列化工具,将js对象转换成所需的查询字符串或表单格式

一、发送请求四个步骤

//1.创建实例
var xhr=new XMLHttpRequest();
//2.打开链接
xhr.open('请求方法','请求 url地址');
//2.1设置请求头
xhr.setRequestHeader('Content-Type','application/json');
//3.发送请求
xhr.send();

//4.接收响应
xhr.onreadystatechange=function(){
	if(xhr.readyState===4&&xhr.status===200){
		console.log(JSON.stringify(xhr.responseText))
	}
}

注意: 服务器返回给客户端的数据都是json格式,如果最后,接收到的不是json格式,则是使用的第三方库帮忙转化的。

上述代码,相关说明

1.open(method,url)

参数:
mthod: 取值可以为GET/POST/HEAD/DELETE/OPTIONS/PUT
url: 请求的主体,发送请求的接口地址

2.requestHeader(属性名称, 属性值)

在AJAX中,如果要post特定格式的数据,需要使用 setRequestHeader() 方法来添加 HTTP 头,否则,后台可能接收不到需要的数据。数据通过send()方法发送,setRequestHeader()方法需要在open()和send()方法之间调用

  • 常用的数据格式(编码可带可不带)

    • 发送json格式数据
    xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8');
    
    • 发送表单数据
    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=utf-8');
    
    • 发送纯文本(不指定Content-type时,此是默认值)
    xhr.setRequestHeader('Content-type', 'text/plain; charset=utf-8');
    
    • 发送html文本
    xhr.setRequestHeader('Content-type', 'text/html; charset=utf-8');
    

3.send()设置发送的数据,开始和服务器端交互

参数: 请求主体内容,如果没有,为null,或者省略。post携带的参数才会在send中发送。

注意:
如果发送的请求携带参数

get: 请求参数以查询字符串的方式拼接在url后方

//请求设置一
xhr.open('get','http:127.0.0.1:8080?a=1&b=2');
let obj={
	a:1
	b:2
}
//请求参数设置二(使用qs转换工具)
xhr.open('get',url路径+Qs.stringify(obj));

post: 请求参数需要传入send()中发送,并且需要根据设置的请求头,发送对应格式的数据

	let obj={
		a:1
		b:2
	}
	//1.json数据格式 
	//告诉后端你传递得数据格式是什么
	xhr.setRequestHeader('Content-type', 'application/json');
	//发送数据
	xhr.send(JSON.stringify(obj));
	
	//2.表单格式数据 Qs.stringify(obj);
	//告诉后端你传递得数据格式是什么
	xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	//发送数据(方法一)
	xhr.send(Qs.stringify(obj));
	//发送数据(方法二)
	xhr.send('a=1&b=2');

4.接收响应,获取数据

发送请求后,会收到响应,收到响应后,XHR对象的以下属性会被填充上数据。

  • responseText: 作为响应体返回的文本。

  • responseXML: 如果响应的内容类型是"text/xml"或"application/xml",那就是包含响应数据的 XML DOM 文档。

  • status: 响应的 HTTP 状态。

  • statusText: 响应的 HTTP 状态描述。

  • readyState: 返回HTTP请求状态
    0 open()尚未调用 UNSENT
    1 open()已调用 OPENED
    2 接收到头信息 HEADERS_RECEIVED
    3 接收到响应主体 LOADING
    4 响应完成 DONE

  • readystatechange: 请求状态改变事件
    当readyState值改变为4或服务器的响应完成时,所有的浏览器都触发该事件

二、原生get请求

//创建实例
var xhr=new XMLHttpRequest();
//设置与服务器交互的信息
xhr.open('get','http://127.0.0.1:8000?a=1&b=2');
//发送请求
xhr.send();
//接收响应
xhr.onreadystatechange=function(){
	if(xhr.readystate===4&&xhr.status===200){
		console.log(JSON.stringify(xhr.responseText))
	}
}

三、原生post请求

//创建实例
var xhr=new XMLHttpRequest();
//设置与服务器交互的信息
xhr.open('post','http://127.0.0.1:8000');
//设置请求头
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
//发送请求
xhr.send('a=1&b=2');
//接收响应
xhr.onreadystatechange=function(){
	if(xhr.readyState===4&&xhr.status===200){
		console.log(JSON.stringify(xhr.responseText))
	}
}

四、JQuery-$.ajax

1 ajax请求(通用请求)

	$.ajax({
                //url
                url: 'http://127.0.0.1:8000/jquery-server',
                //请求参数
                data: {a:100, b:200},
                //请求类型
                type: 'GET',
                //响应体结果
                dataType: 'json',
                 //请求头信息
                headers: {
                   Content-Type:'application/json',
                   Authrization:token,
                },
                 //超时时间
                timeout: 2000,
                //成功的回调
                success: function(data){
                    console.log(data);
                },
                //失败的回调
                error: function(){
                    console.log('出错啦!!');
                },
               
            });

2 get 请求

$.get(url, [data], [callback], [type])
url: 请求的 URL 地址。
data: 请求携带的参数。
callback: 载入成功时回调函数。
type: 设置返回内容格式,xml, html, script, json, text, _default。

  var obj = {
      page: 1,
      pageSize: 10
  }
  url='http://127.0.0.1:8080'
 $.get(url, obj, function(res) {
      console.log(res)
  })

2 post 请求

同get一样使用
$.post(url, [data], [callback], [type])
url: 请求的 URL 地址。
data: 请求携带的参数。
callback: 载入成功时回调函数。
type: 设置返回内容格式,xml, html, script, json, text, _default。

五、自定义$.ajax

该自定义ajax默认发送表单格式的数据
_ajax.js

function resloveData(data) {
    let arr = []
    for (let i in data) {
        var str = i + '=' + data[i]
        arr.push(str)
    }

    return arr.join('&')
}

function _ajax(data) {
    var xhr = new XMLHttpRequest()
    var qs = resloveData(data.data)

    if (data.method.toUpperCase() === 'GET') {
        xhr.open(data.method, data.url + qs);
        xhr.send()
    } else if (data.method.toUpperCase() === 'POST') {
        xhr.open(data.method, data.url);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.send(qs);
    }
    xhr.onreadystatechange = function() {
        if (xhr.readyState === 4 && xhr.status === 200) {
            var res = JSON.parse(xhr.responseText);
            data.success(res);
        }
    }
}

test.html

<script src="./_ajax.js"></script>
<script>
    // 2. 调用自定义的 itheima 函数,发起 Ajax 数据请求
 	  _ajax({
        method: '请求类型',
        url: '请求地址',
        data: { /* 请求参数对象 */ },
        success: function(res) { // 成功的回调函数
            console.log(res)     // 打印数据
        }
    })
</script>

相关文章:

  • nginx调优参数整理总结
  • 【webrtc】初识mia服务器
  • 详解模板引擎一
  • 大数据框架介绍与实操
  • springboot网上课程教学授课网站java
  • springboot+vue+elementui二手手机销售商城网站
  • JVM虚拟机栈的五道面试题
  • qemu与gdb内核调试环境搭建
  • STM32CUBEMX开发GD32F303(13)----定时器TIM捕获PWM测量频率与占空比
  • Spark Structured Streaming - 1
  • 自动化测试中的验证码问题
  • 工具箱目录
  • 数学知识——阶乘分解
  • 第二篇 如何选择操作系统
  • java二叉排序树(含java代码详解)
  • [译]前端离线指南(上)
  • AHK 中 = 和 == 等比较运算符的用法
  • Android Volley源码解析
  • Android单元测试 - 几个重要问题
  • Docker 笔记(2):Dockerfile
  • java中具有继承关系的类及其对象初始化顺序
  • mysql_config not found
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 汉诺塔算法
  • 前端之Sass/Scss实战笔记
  • 如何使用 JavaScript 解析 URL
  • 一起参Ember.js讨论、问答社区。
  • 移动端 h5开发相关内容总结(三)
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • nb
  • FaaS 的简单实践
  • 阿里云重庆大学大数据训练营落地分享
  • # 安徽锐锋科技IDMS系统简介
  • #android不同版本废弃api,新api。
  • $.ajax()参数及用法
  • (1)(1.11) SiK Radio v2(一)
  • (java)关于Thread的挂起和恢复
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (接口自动化)Python3操作MySQL数据库
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (转)LINQ之路
  • .net 7 上传文件踩坑
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net 使用ajax控件后如何调用前端脚本
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • ;号自动换行
  • @Controller和@RestController的区别?
  • [20150904]exp slow.txt
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [BZOJ 1040] 骑士
  • [BZOJ3757] 苹果树
  • [C#]扩展方法
  • [C语言]一维数组二维数组的大小
  • [Gamma]阶段测试报告