fetch发送http请求

本文深入探讨Fetch API的使用,包括GET与POST请求的配置,以及如何结合Async/Await优化异步操作,实现更简洁的代码结构。通过实例演示,如注册功能的实现,展示前端开发中网络请求的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

fetch发送http请求

推荐MDN文档中使用 Fetch
——
Fetch API 提供了一个 JavaScript 接口,用于访问和操纵 HTTP 管道的一些具体部分,例如请求和响应。它还提供了一个全局 fetch() 方法,该方法提供了一种简单,合理的方式来跨网络异步获取资源。

注意:fetch PC端有兼容性 , 在移动端安卓等可以使用

    // 【1】 fetch的基本使用
    // fetch 返回值是 promise
    var fetch_promise = fetch('./fetch_text.text')
    // var fetch_promise = fetch('./fetch_text.php')

    fetch_promise.then(function (response) {
      // 数据配置阶段 => 返回一个新的promise对象
      // console.log(response); 可以查看response里面方法
      // 如果调用 response.json() 那么我们在后续的then之中就不用JSON.parse 转换数据了,
      // 因为数据已经被转换成对象数组格式了;
      // 而 response.text(); 以纯字符的形式进行输出;
      return response.text()
      // return response.json()
    })
      // 在后面处理使用这个新的promise对象
      .then(function (res) {
        // 结果输入
        console.log(res)
      })


    // 【2】 fetch 请求配置
    // get 和 post
    var fetch_promise = fetch("./fetch_text.php", {
      method: "POST",
      // body里面传 data 数据
      body: "username=fqniu&password=123456",
      // 设置头文件
      header: {
        "content-type": "application/x-www-form-urlencoded"
      }
    })
    fetch_promise.then(function (response) {
      // response.json(); 数据已经被转换成对象数组格式
      return response.json()
    })
      .then(function (jsonDate) {
        console.log(jsonDate)
      })
      .catch(function () {
        // 打印错误
        console.log("报错", arguments)
        alert("抱歉,服务器开小差了哦")
      })

    // 注意点:response.json() 这个方法必须接受json数据,不然报错如下
    // [SyntaxError: Unexpected token } in JSON at position 15, callee: ƒ, Symbol(Symbol.iterator): ƒ]
    

fetch和async_await的使用

html文件


    // promise 的语法糖写法:
    // async 定义一个异步函数,可以把异步程序当成同步程序来写
    // await 表示等待异步程序执行

    // 定义一个异步函数
    async function fun() {
      // 在promise之前写await 
      // awiat 之后会等到 promise 编程resolve在执行,其他程序在等待状态
      // 这里用fetch 简化promise.then
      let response = await fetch("./fetch_text.php")
      let data = await response.json()
      return data
    }

    async function fun2() {
      var res = await fun()
      console.log(res)
      // 数据可以渲染 使用
      document.write("<h1>" + res.a + "</h1>")
    }

    // 最后调用函数
    fun2()

    // 结果为get请求 
    // 打印结果为php里面的数据 {a: "hello world"}
    

fetch_text.php文件

<?php
  echo '{"a":"hello world"}';
?>

在这里插入图片描述
或者其他写法拓展

  项目中注册页部分代码使用 fetch 和 asyncawait 
  /*
  注册页如下:

  【1】注册功能思路
    1、给注册按钮绑定点击事件 (因为是异步程序,所以这里使用async和await)

    2、因为注册按钮为a标签 , 所以 阻止 的默认跳转事件行为

    3、获取输入框中的登录值和密码值

    4、把数据发送给前端 通过 fetch 发送请求
      4.1 fetch中的 第一个参数为url 第二个参数是 请求方式和body值配置,第三个参数 是设置header

    5、await 接收响应的数据 并把数据的 json类型 转为 对象或数组

    6、判断数据是否成功
      6.1 如果成功 跳转到登录页面
      6.2 如果不成功 则弹出错误 (注册有误)
  */


  // 点击按钮 , 阻止默认事件;
  // 发送请求给后端;
  $("#register_btn").onclick = async function (evt) {
    // 阻止默认事件;
    var e = evt || event;
    e.preventDefault();
    // 获取输入框之中的数据;
    var email_value = $("#inputEmail").value;
    var password_value = $("#inputPassword").value;
    // 把数据发送到后端;
    /* fetch 有三个参数
      第一个参数为 url 
      第二个参数为 请求方式和数据
      第三个参数为 设置header 
    */
    let response = await fetch("../server/register.php", {
      method: "POST",
      body: formate({
        email: email_value,
        password: password_value
      }),
      headers: {
        "Content-Type": "application/x-www-form-urlencoded"
      }
    })
    // 接收后端返回响应的数据 并使用json方法把数据改为对象类型 
    let data = await response.json();
    console.log(data)

    // 根据后端返回的数据,判断用户名是否可以跳转到登录页 
    // 如果数据判断是false 则提示注册信息有误 
    // 有误的可能原因:已经存在注册过
    if (data.type === "success") {
      location.href = "./login.html";
    } else {
      alert("注册信息有误");
    }
  }

register.php文件

<?php

/*
  注册页 
  后端的思路:
  1、获取前端传过来的数据,这里是用户名和密码
  2、连接数据库,并选择数据库
  3、操作数据库
     3.1 编写sql语句
     3.2 执行sql语句
     3.3 返回的资源类型进行遍历处理
  4、判断数据是否在存在,有就关闭数据库 并返回json数据 die结果
  5、把注册的 数据 (用户名和密码) 插入 数据库中
     5.1 插入数据到数据库中
     5.2 执行sql语句
  6、判断是否插入成功 
*/

  # 接受前端的用户信息;
  $email = $_POST["email"];
  $password = $_POST["password"];

  # 链接数据库 , 比对数据库之中是否存在这条信息;
  # 1. 建立链接
  $con = mysql_connect("localhost", "root" , "nfq123456");
  # 2. 选择数据库 
  mysql_select_db("udata");
  mysql_query("set names utf8");
  # 3. 操作数据库
  // 1. 编写 sql 语句;
  // 2. php的API去执行sql语句; 
  // - 字段名需要使用 `` 引起来 
  // - 关键字要大写
  // $sql = 'SELECT `email` FROM `user` WHERE `email`="'.$email.'"';
  // 这样外面是 双引号 里面变量用 单引号 也可以
  $sql = "SELECT `email` FROM `user` WHERE `email`='$email'";

  $res = mysql_query($sql);
  // # 4. 把返回的资源类型进行遍历处理
  $arr = mysql_fetch_array( $res );

  if($arr){
      mysql_close($con);
      die('{"type":"error","msg":"用户名重名"}');
  }

  # 没有重复数据 : 
  $insert_sql = "INSERT INTO `user` ( `email` , `password`) VALUES ('$email' , '$password')";

  // 执行sql语句
  $res = mysql_query($insert_sql);
  
  # 根据 $res 判定插入是否成功;
  if($res){
      echo '{"type":"success","msg":"注册成功"}';
  }else{
      echo '{"type":"error","msg":"数据库错误"}';
  }

?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值