ajax前后端交互

目标

1. 理解ajax基本使用

2. 会使用XMLHttpRequest对象实现数据交互

3. 了解onreadystatechange服务器响应信息

4. 会使用FormData对象上传文件

5. 了解upload事件对象

知识要点

1.ajax使用

- ajax是:  *Ajax* 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML)

- 新建XMLHttpRequest对象;

```js

let xhr = new XMLHttpRequest();

```

- 配置请求参数

```js

xhr.open("get","/checkUser",true); //true是异步,false是同步

```

- 接收返还值

```js

xhr.onload = function(){

let res = JSON.parse(xhr.responseText);

}

```

- 发送服务器

```

xhr.send();

```

## 针对ajax的详细解释

- get注意点

- get通过parmas传参

- get和querystring的问题,通过url传参

- post注意点

- 发送数据时候需要设置http正文头格式;

```js

xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");  //默认编码

xhr.setRequestHeader("Content-type","multipart/form-data");  //二进制编码

xhr.setRequestHeader("Content-type","application/json");  //json编码

```

- 获取头部信息;

- getAllResponseHeaders  或者是getResponseHeader  ;

## onreadystatechange

onreadystatechange:存有处理服务器响应的函数,每当 readyState 改变时,onreadystatechange 函数就会被执行。

readyState:存有服务器响应的状态信息。

- 0: 请求未初始化(代理被创建,但尚未调用 open() 方法)

- 1: 服务器连接已建立(`open`方法已经被调用)

- 2: 请求已接收(`send`方法已经被调用,并且头部和状态已经可获得)

- 3: 请求处理中(下载中,`responseText` 属性已经包含部分数据)

- 4: 请求已完成,且响应已就绪(下载操作已完成)

status常用状态


HTTP状态码

描述

100

继续。继续响应剩余部分,进行提交请求

200

成功

301

永久移动。请求资源永久移动到新位置

302

临时移动。请求资源零时移动到新位置

304

未修改。请求资源对比上次未被修改,响应中不包含资源内容

401

未授权,需要身份验证

403

禁止。请求被拒绝

404

未找到,服务器未找到需要资源

500

服务器内部错误。服务器遇到错误,无法完成请求

503

服务器不可用。临时服务过载,无法处理请求

- 返还数据类型  

- 服务器返还json数据

```js

xhr.responseText  //来获取

```

- 服务器返还xml数据

```js

xhr.responseXML //获取值

```

- 重写response里的content-type内容

- xhr.overrideMimeType(‘text/xml; charset = utf-8‘)

- 同步及异步ajax;

- 设置true和false区别;

ajax代码封装

  function ajax(options) {
        let opts = Object.assign({
            url: "",
            method: "get",
            data: "",
            headers:{
                "content-type":"application/x-www-form-urlencoded",
            },
            success(res) {}
        }, options)
        let xhr = new XMLHttpRequest();

        if(opts.method==="get"){
            console.log(o2u(opts.data))
            // data: {
            //     hello: "你好",
            //     height: "178cm"
            // }
            // hello=还好&height=178cm
            opts.url = opts.url+"?"+o2u(opts.data);
        }

        xhr.open(opts.method,opts.url,true);
        // 设置头部
        for(let key in opts.headers){
            xhr.setRequestHeader(key,opts.headers[key]);
        }
        let sendData;
        switch(opts.headers[‘content-type‘]){
            case ‘application/x-www-form-urlencoded‘:
                sendData = o2u(opts.data);
            break;
            case ‘application/json‘:
                sendData = JSON.stringify(opts.data);
            break;
        }

        xhr.onload = function(){
            opts.success(JSON.parse(xhr.responseText));
        }

        if(opts.method=="get"){
            xhr.send();
        }else{
            xhr.send(sendData);
        }
        function o2u(obj){
            let keys = Object.keys(obj);
            let values = Object.values(obj);
            // hello=你好;
            // height=178cm
            return keys.map((v,k)=>{
                return `${v}=${values[k]}`;
            }).join("&");
        }
    }

2.利用FormData来实现文件上传

- 创建FormData对象

- 监控上传进度

upload 事件

- onloadstart   上传开始

- onprogress  数据传输进行中

- evt.total :需要传输的总大小;

- evt.loaded :当前上传的文件大小;

- onabort 上传操作终止

- onerror  上传失败

- onload 上传成功

- onloadend 上传完成(不论成功与否)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <input type="file" class="myfile" />
    <button>点击我上传文件</button>
</body>
<script>
    document.querySelector("button").onclick = function(){
        let file = document.querySelector(".myfile").files[0];
        // console.log(files);
        let form = new FormData();
        form.append("img",file);
        form.append("name","张三");
        let xhr = new XMLHttpRequest();
        xhr.open("post","/upload",true);
        xhr.onload = function(){
            console.log(xhr.responseText);
        }
        xhr.send(form);
    }
</script>
</html>

原文地址:https://www.cnblogs.com/supermanGuo/p/11496849.html

时间: 2024-10-09 09:30:51

ajax前后端交互的相关文章

SSM-网站后台管理系统制作(4)---Ajax前后端交互

前提:Ajax本身就为前后端交互服务的,实现功能:用户输入信息,实时判断用户的情况,这也是现在登录界面普遍流行的做法.前端js通过注释识别Controller层,该层查询返回,和之前Google验证码有点像. 学习教程:http://how2j.cn/ 菜鸟教程 上面都有讲解, 前端Ajax代码 1 </script> 2 3 <script language="javascript" type="text/javascript"> 4 $(

ajax前后端交互原理(1)

1.Node.js简介 1.1.前后台数据交互流程 在web开发中,我们经常听说前端和后台,他们分别是做什么具体工作的呢?他们怎样交互的呢?我们得把这些基础的问题都搞明白了,才有一个大致的学习方向,首先,我们来看一张生活中几乎每个人都经历过的一个场景,如下图: 当你去餐馆吃饭的时候,坐下后服务员会带着一个菜单过来,问你需要点什么菜,这个时候你浏览了菜单上的菜,把想吃的菜告诉服务员,服务员把你点的菜拿到后台,后台根据你点的菜名,逐一完成,菜做完后叫服务员给你上菜,就这么一个场景其实和我们web开发

ASP.NET MVC+Ajax前后端交互

在Web系统中,Ajax技术已经成为提高用户体验的必备技术.开发Ajax程序,涉及两方面的内容:一是客户端技术,二是服务器端技术. (1)客户端技术 核心工作是通过JavaScript向服务器发送数据和接收数据.初次之外还涉及两个工作,一是数据的展示,因此涉及Html DOM.CSS等相关技术:二是数据处理,因此涉及JSON.XML等数据格式处理技术.在实际开发过程中,可以借助一些客户端框架,来提高工作效率. (2)服务器端技术 核心工作是完成在服务器端接收和发送数据. 10.1 使用动作方法处

ajax前后端交互原理(2)

2.NPM使用 2.1.NPM是什么 NPM的全称是Node Package Manager,是一个NodeJS包管理和分发工具,这里要搞清楚包的概念,通俗的说,包就是具有一定功能的工具(软件),本质上呢这些包就是很多文件的集合,例如下图就是一个包: 这个包的作用就是将ES6的代码转换成ES5的代码,这个包我们在后面的webpack课程中会讲到,总之,你要明白的第一个概念就是包就是一些文件组成的,其实就是我们写的具有一定功能的源码文件 如果你理解了包的概念,那么NPM包管理器就很容易理解了,既然

Vue-CLI项目-axios模块前后端交互(类似ajax提交)

08.31自我总结 Vue-CLI项目-axios前后端交互 一.模块的安装 npm install axios --save #--save可以不用写 二.配置main.js import axios from 'axios' Vue.prototype.$axios = axios; 三.使用 created() { // 组件创建成功的钩子函数 // 拿到要访问课程详情的课程id let id = this.$route.params.pk || this.$route.query.pk

写给刚入门的前端工程师的前后端交互指南

转自原文 写给刚入门的前端工程师的前后端交互指南 作为刚接触前端的不久的童鞋,大家都会兴奋于CSS和JS所带来漂亮界面,然而,前端工程师除了UI重构外,还有非常重要的职责在正确的区域渲染出服务端的数据.毕竟,我们要构建一个大的web应用,必然不是普普通通的静态页面构成. 下文将罗列将来前端工程师应该必备的同后端打交道的常用技能. 服务端渲染 谈起服务端渲染,对于动态服务而言,这个世界上跑的大多数页面都经历过服务端的数据渲染,接口->前端赋值->模版渲染 .这一切都在服务器完成,我们查看源码时候

浅谈前后端交互

首先,关于接口文档--由后台设计修改(前端是接口文档的使用者) 其次,前后端交互的数据,格式是:json,(xml不多了) 重要的是,前后端如何交互??--接口地址+前端请求的参数+后台返回的参数 1.接口地址: 2.前端请求的参数: 形式:get/post(get从指定服务器提取数据,post将数据提交给指定服务器): 所有前端url后面的参数都是辅助后台数据查询的:若不需要参数,则后台会直接将url给前端: 注:为什么需要在请求的时候传入参数??--后台在查询数据库的时候需要按条件查询. 3

初识 vue —— 最简单的前后端交互示例

一.初识 vue 时的困惑 最近想学一门前端技术防身,看到博客园中写 vue 的多,那就 vue 吧.都说 vue 的官方教程写得好,所以我就从官方教程开始学习.官方教程说"Vue (读音 /vju?/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用."但是这个概念是个什么鬼?还是让人一头雾水嘛.而且我一开始也没有搞清楚 vue 的定位,只知道它是一个前端库,但是确实不知道它的优势是什么,还以为它是一个学会就能一劳永

百度ueditor的图片上传,前后端交互使用

百度ueditor的使用 一个文本编辑器,看了网上很多文档写的很乱,这里拾人牙慧,整理下怎么使用. 这个东西如果不涉及到图片附件上传,其实很简单,就是几个前端文件,直接引用,然后配置下ueditor.config.js即可.这里就不多说. 至于图片上传,ueditor 设计的时候是考虑和后端交互的,所以会看到可以下载什么php,java版本,还有很多网上会说道有什么后端配置文件,改那改这的,但是实际上后端存储业务是按照公司实际来的,实践起来并不顺利. 本文重点讲述的只用前端文件和ueditor.