AJAX请求笔记(二)

347 阅读3分钟

使用jQuery发送GET请求

const result=document.getElementById("result");
$("button").eq(0).click(function(){
    $.get("http://127.0.0.1:8000/jQuery-server",{a:100,b:200},function(data){
     console.log(data)
     result.innerText=data.name
    },'json')

})

server.js

// jQuery服务
app.all('/jQuery-server',(require,response)=>{
      // 设置响应头
      response.setHeader('Access-Control-Allow-Origin','*');  //设置允许跨域
      response.setHeader('Access-Control-Allow-Headers','*');  //表示所有类型的头信息我都可以接受
      // response.send("hello jQuery");
      const data={
          name:"小太阳"
      };
      response.send(JSON.stringify(data))

  });

使用AJAX发送POST请求

   $("button").eq(1).click(function(){
        $.post("http://127.0.0.1:8000/jQuery-server",{a:100,b:200},function(data){
            console.log(data)
        })
    })

jQuery通用型AJAX

 $("button").eq(2).click(function(){
    $.ajax({
        // 请求地址
        url:"http://127.0.0.1:8000/jQuery-server",
        // 设置参数
        data:{a:1,b:2},
        // 请求类型
        type:"GET",
        // 响应体结果   把字符串转化成一个对象
        dataType:'JSON',
        // 成功回调
        success:function(data){
            console.log(data);
            result.innerText=data.name;   //获取name值
        },
        timeout:2000,
        // 失败回调
        error:function(){
            console.log("出错啦")
        }
    })
})

axsio发送AJAX请求

axios的AJAX请求文档:github.com/axios/axios…

数据返回和处理方式和jQuery不太一样,jQuery使用的是回调函数,axios基于的是 Promise。返回一个对象,data是一个响应体解析过后的结果自动转成一个对象

GET请求发送

const btn=document.querySelectorAll("button");
const result=document.getElementById("result");
  //    配置baseURL
axios.defaults.baseURL="http://127.0.0.1:8000"
btn[0].onclick=function(){
    axios.get("/axios-server",{
        params: {       //设置URl参数
        id: 12345,
        vip:2
        },
        // 设置请求头信息 
        headers:{
            name:"xiaotaiy",
            age:20
        }
    }).then(value=>{
        console.log(value)
        result.innerText=value.data.name
    })
}

发送POST请求

在POST请求中,第一个参数是URL,第二个参数是data(请求体),第三个参数是其他

btn[1].onclick=function(){
  // {user:"admin",id:"admin"}  请求体信息
  axios.post('/axios-server',{user:"admin",id:"admin"},
  {
      // 设置URL参数
      params:{
          id:12,
          vip:2
      },
      // 设置请求头信息
      headers:{
          name:"cai",
          age:22
      }
  })
}

AXIOS通用方式发送请求

btn[2].onclick=function(){
axios({
    method:"post",
    url:"/axios-server",
    params:{
        id:22,
        vip:33
    },
    headers:{
        name:"caicai",
        sge:18
    },
    data:{
        user:"admin",
        userID:"admin"
    }
}).then(response=>{
    console.log(response);
    result.innerText=response.data.name;
})
}

使用fetch()函数发送AJAX请求

fetch函数属于全局对象的,可以直接去调用,返回的结果是一个promise对象。接收两个参数,第一个是URL,第二个是可选的配置项。第一个参数除了可以写一个URL之外还可以写一个Request(请求)对象。

const btn= document.querySelector("button");
btn.onclick=function(){
    fetch("http://127.0.0.1:8000/fetch-server",{
        // 请求方法
        method:'POST',
        // 设置请求头
        headers:{
            name:"xiaocai"
        },
        // 设置请求体
        body:"user=admin&password=admin"
    }).then(response=>{
        // return response.text();   //返回文本 
        return response.json();         //返回json对象
    }).then(response=>{
        console.log(response)
    })
}

同源策略

所谓同源策略就是域名、端口号、协议必须完全相同,违背同源策略的就是跨域

AJAX在发送请求的时候是默认遵循同源策略的

如何解决跨域 JONSP

JSONP是一个非官方的跨域解决方案,只支持get请求

JSONP是怎么工作的:在网页有一些标签自身就支持跨域的,比如:img、link、iframe、script。JSONP就是用script标签发送请求的

server.js

// 1、引入express
const express = require('express');
const { response } = require('express');

//2、创建应用对象
const app=express();


// 检测用户名是否存在
app.all('jsonp-server',(require,response)=>{
    const data={
        exist:1,
        msg:"用户名已经存在"
    };
    // 将数据转化为字符串
    let str=JSON.stringify(data);
    // 返回结果
    response.end(`handle(${str})`);    //这里返回handle在主页面就要声明一个handle
    
})

// 4. 监听端口启动服务
app.listen(9000,()=>{
    console.log("服务已经启动,9000,端口监听中...")
})

HTML页面

 用户名:<input type="text" id="username">
<p></p>
<script>
    // 获取input元素
    const input = document.querySelector("input");
    const p = document.querySelector("p");
    // 声明handle函数

    function handle(data){
    //    修改input边框颜色
        input.style.border = "solid 1px #f00";
        // 修改p标签的提示文不然那个
        p.innerHTML = data.msg;
    }

    // 绑定事件  onblur丧失焦点事件
    input.onblur = function () {
        // 获取用户的输入值
        let username = this.value;
        // 想服务端发送请求,检测用户名是否存在
        // 1、创建script标签
        const script = document.createElement("script");
        // 设置标签src属性
        script.src ='http://127.0.0.1:9000/jsonp-server';

        document.body.appendChild(script);

    }
</script>