ajax二get post与api

ajax原生案例 get请求

  1. 先写一个服务器 一定要写跨域!!!
const express = require("express");

const app=express();
app.get('/server',(req,res)=>{
    // 设置响应头 设置允许跨域
  res.setHeader('Access-Control-Allow-Origin', '*');
    res.send('hello ajax')
});
app.listen('8080',()=>{
    console.log('running at http://127.0.0.1:8080');
})

  1. 写一个html发送ajax文件
  2. 创建 2. 初始化 3. 发送 4.绑定事件
 btn01=document.getElementsByTagName('button')[0];
    box=document.getElementById('box');
    btn01.onclick=()=>{
        //1.创建对象 xhr代表ajax请求
        const xhr=new XMLHttpRequest();
        //2. 初始化 设置请求的方式和地址 固定为xhr.open
        xhr.open('GET','http://127.0.0.1:8080/server')
        //3. 发送这个ajax请求
        xhr.send();
        //4.发送完请求 需要处理这个请求 绑定一个处理结果的事件
        xhr.onreadystatechange=()=>{
        // readyState 是 xhr 对象中的属性, 表示状态 0 1 2 3 4
        //判断 (服务端返回了所有的结果)
            if(xhr.readyState===4){
                //判断响应状态码
                if (xhr.status>=200&&xhr.status<300) {
                    //输出响应报文!!! 包含行 头 空行 体
                    console.log('状态码',xhr.status);
                    console.log('状态字符串',xhr.statusText);
                    console.log('所有响应头',xhr.getAllResponseHeaders());
                    console.log('响应体',xhr.response);
                    //这里面没有传递参数 就是ajax请求自带的属性
                    box.innerHTML=xhr.response;
                }
            }
        }
    }

xhr.send()是发送参数 相当于地址中有/?id=参数信息 而服务器的res.send是响应体
发送出来的数据在palyload查看

若在地址中
xhr.open(‘GET’,‘http://127.0.0.1:8080/server?a=100&b=200&c=300’)
那么请求时 会在playload里显示参数的对象形式
a: 100
b: 200
c: 300

状态码 是200 成功
状态字符串 是ok
所有响应头 是响应头
响应体 是 服务器中res.send的内容

状态码 200
状态字符串 OK
所有响应头 content-length: 10
content-type: text/html; charset=utf-8
响应体 hello ajax


ajax post请求

btn02.addEventListener('mouseover',()=>{
        const xhr=new XMLHttpRequest();
        xhr.open('POST', 'http://127.0.0.1:8080/server');
        //设置请求头
        xhr.setRequestHeader('Content-Type','application/x-www-from-urlencoded');
        //自定义参数
        xhr.setRequestHeader('name','aaa');
        //发送参数
        xhr.send('a=100&b=200&c=300');
        xhr.onreadystatechange=()=>{
            if (xhr.readyState===4) {
                if (xhr.status>=200 && xhr.status < 300) {
                    box.innerHTML=xhr.response;
                }
            }
        }

    })

若想设置请求头 用setrequestheader()来设置
也可以自定义 但是自定义要在服务器中 设置all 并可以接受任意请求头
若设置了请求头 必须在服务器中设置all和 接受任意 不然报错!!!

//可以发送任意类型的请求
app.all('/server',(req,res)=>{
    // 设置响应头 设置允许跨域
  res.setHeader('Access-Control-Allow-Origin', '*');
  //可以接收任意请求头
  res.setHeader('Access-Control-Allow-Headers','*')
    res.send('hello ajax post')
});

若想在页面打印出对象格式

在服务器对对象转换为json格式

app.all('/server/json',(req,res)=>{
    // 设置响应头 设置允许跨域
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Headers','*')
  const data={
      nama:'aaa'
  };
  //进行字符串转换
  //因为res.send只能接受字符串 所以用stringfiy把对象转化为json字符串
  let str=JSON.stringify(data);
    res.send(str)
});

这时 ajax的请求体也是这个json的字符串
若想响应 原本对象的一个属性 需要将json再转化为对象

1. 手动转换

json.parse()


 //进行字符串转换
  //因为res.send只能接受字符串 所以用stringfiy把对象转化为json字符串
  let str=JSON.stringify(data);
    res.send(str)

2. 自动转换

xhr可以设置请求体属性
若设置了请求体类型为json 则 可以直接把它当对象来使用

        //设置响应体类型
        xhr.responseType='json';
        //-----------------------------------
         box.innerHTML = xhr.response.name;

API总结

XMLHttpRequest():创建 XHR 对象的构造函数
status:响应状态码值,如 200、404
statusText:响应状态文本,如 ’ok‘、‘not found’
readyState:标识请求状态的只读属性 0-1-2-3-4
onreadystatechange:绑定 readyState 改变的监听
responseType:指定响应数据类型,如果是 ‘json’,得到响应后自动解析响应
response:响应体数据,类型取决于 responseType 的指定
timeout:指定请求超时时间,默认为 0 代表没有限制
ontimeout:绑定超时的监听
onerror:绑定请求网络错误的监听
open():初始化一个请求,参数为:(method, url[, async])
send(data):发送请求
abort():中断请求 (发出到返回之间)
getResponseHeader(name):获取指定名称的响应头值
getAllResponseHeaders():获取所有响应头组成的字符串
setRequestHeader(name, value):设置请求头

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值