原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)

yizhihongxing

下面是关于“原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)”的完整攻略,包含以下几个部分:

  1. 关于原生JS封装ajax

原生JS可以使用XMLHttpRequest对象来发送http请求,通过该对象的open()和send()方法来实现。但是,为了方便和规范使用ajax,我们可以封装一个ajax函数。下面是一个基本的封装实现:

function ajax(method, url, data, success) {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4 && xhr.status == 200) {
            success(xhr.responseText);
        }
    }
    xhr.open(method, url, true);
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.send(data);
}

在上述代码中,我们通过一个名为ajax的函数来封装ajax操作。该函数使用了四个参数:请求方式(method)、请求地址(url)、数据(data)、回调函数(success)。

使用该函数时,我们只需要传递对应的参数即可完成ajax的调用。示例如下:

ajax("GET", "http://example.com", null, function(responseText) {
    console.log(responseText);
});
  1. 传json、str和excel文件上传

对于json和str的传递,我们只需要将数据格式转换为文本字符串,然后作为data参数传递给ajax函数即可。示例如下:

var jsonData = {name: "张三", age: 20};
var jsonString = JSON.stringify(jsonData); // 将json数据格式转化为文本字符串
ajax("POST", "http://example.com", jsonString, function(responseText) {
    console.log(responseText);
});

var strData = "name=张三&age=20";
ajax("POST", "http://example.com", strData, function(responseText) {
    console.log(responseText);
});

对于excel文件的上传,则需要借助HTML5的FormData对象和XMLHttpRequest的upload属性。示例如下:

var fileInput = document.getElementById("file-input");
var file = fileInput.files[0];
var formData = new FormData();
formData.append("file", file);
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
    if(xhr.readyState == 4 && xhr.status == 200) {
        console.log(xhr.responseText);
    }
};
xhr.upload.addEventListener("progress", function(event) {
    var percent = event.loaded / event.total * 100; // 计算上传进度
    console.log("上传进度为:" + percent + "%");
});
xhr.open("POST", "http://example.com/upload");
xhr.send(formData);

在上述代码中,我们首先获取到一个id为file-input的input元素,然后通过它的files属性获取到文件。接着,我们创建了一个FormData对象,并将文件添加到该对象中。在发送请求时,我们需要通过XMLHttpRequest的upload属性来监听上传进度事件,并在回调函数中输出上传进度。最后,我们调用open()和send()方法来发送请求。

  1. 提交表单

提交表单时,我们需要将表单中的数据格式化为json或str类型,然后作为data参数传递给ajax函数。示例如下:

var form = document.getElementById("my-form");
var data = new FormData(form);
ajax("POST", "http://example.com", data, function(responseText) {
    console.log(responseText);
});

在上述代码中,我们首先获取到一个id为my-form的表单元素,然后通过FormData对象将表单数据格式化为可传输的格式。接着,我们将该格式化后的数据作为data参数传递给ajax函数,并设置回调函数来接收返回的数据。

  1. 示例:获取天气信息

下面是一个使用原生JS封装ajax异步获取天气信息的示例。在该示例中,我们通过向聚合数据的API接口发送请求,来获取指定城市的天气信息,并将获取到的数据展示在页面上。完整代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>天气查询</title>
    <script>
        function ajax(method, url, data, success) {
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function() {
                if(xhr.readyState == 4 && xhr.status == 200) {
                    success(xhr.responseText);
                }
            }
            xhr.open(method, url, true);
            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhr.send(data);
        }
        function getWeather() {
            var cityInput = document.getElementById("city");
            var city = cityInput.value;
            var key = "your-api-key"; //需要替换为你自己的API Key
            var url = "https://www.tianqiapi.com/api?version=v6&city="+city+"&key="+key;
            ajax("GET", url, null, function(responseText) {
                var result = JSON.parse(responseText);
                var weather = result.wea;
                var temperature = result.tem;
                var airQuality = result.air;
                var html = "天气:"+weather+",温度:"+temperature+",空气质量:"+airQuality;
                document.getElementById("result").innerHTML = html;
            });
        }
    </script>
</head>
<body>
    <input type="text" id="city">
    <button onclick="getWeather()">查询</button>
    <div id="result"></div>
</body>
</html>

在该示例中,我们在页面中创建了一个输入框、一个查询按钮和一个展示结果的div元素。当用户点击查询按钮时,我们获取输入框中的城市名称,并将其作为参数向聚合数据的API接口发送请求。在请求成功后,我们解析返回的json格式数据,并将其显示在结果div元素中。

  1. 示例:上传文件

下面是一个使用原生JS实现上传文件的示例。在该示例中,我们允许用户选择一个文件,然后将该文件上传到指定的服务器,并在上传过程中展示上传进度。完整代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
    <script>
        function ajax(method, url, data, success) {
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function() {
                if(xhr.readyState == 4 && xhr.status == 200) {
                    success(xhr.responseText);
                }
            }
            xhr.open(method, url, true);
            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhr.send(data);
        }
        function uploadFile() {
            var fileInput = document.getElementById("file-input");
            var file = fileInput.files[0];
            var formData = new FormData();
            formData.append("file", file);
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function() {
                if(xhr.readyState == 4 && xhr.status == 200) {
                    console.log(xhr.responseText);
                }
            };
            xhr.upload.addEventListener("progress", function(event) {
                var percent = event.loaded / event.total * 100;
                document.getElementById("progress").innerHTML = "上传进度:"+percent.toFixed(2)+"%";
            });
            xhr.open("POST", "http://example.com/upload");
            xhr.send(formData);
        }
    </script>
</head>
<body>
    <input type="file" id="file-input">
    <button onclick="uploadFile()">上传</button>
    <div id="progress"></div>
</body>
</html>

在该示例中,我们在页面中创建了一个上传文件的input元素、一个上传按钮和一个展示上传进度的div元素。当用户点击上传按钮时,我们获取input元素中选择的文件,并将其通过FormData对象包装为可传输的格式。然后,我们通过XMLHttpRequest对象向服务器发送请求,并在该对象的upload属性上监听上传进度事件,在回调函数中更新上传进度。最后,我们调用open()和send()方法发送请求,将文件传输给服务器。

以上就是关于“原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)”的完整攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JS封装ajax 传json,str,excel文件上传提交表单(推荐) - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 使用Node搭建reactSSR服务端渲染架构

    使用Node搭建reactSSR服务端渲染架构是一个相对复杂的过程,需要以下步骤: 1. 创建基础项目 我们可以使用脚手架工具create-react-app创建一个基础的React项目。 npx create-react-app my-app –template typescript 之后需要安装一些依赖包,包括react、react-dom、react…

    node js 2023年6月8日
    00
  • pm2与Verdaccio搭建私有npm库过程详解

    概述 本教程将介绍如何使用pm2和Verdaccio搭建私有npm库的详细过程。 准备 在开始过程之前,确保你已经安装了pm2和Verdaccio,并有一个npm账户。 安装pm2 PM2是一个Node.js应用程序的生产过程管理器。使用PM2可管理和保持应用程序的活动状态。通过以下命令可全局安装PM2: $ npm install pm2 -g 安装Ver…

    node js 2023年6月8日
    00
  • npm install安装失败报错:The operation was rejected by your operating system

    当我们使用npm安装依赖时,可能会出现”npm install安装失败报错:The operation was rejected by your operating system”的错误提示。这个错误通常是因为电脑权限问题导致的,我们可以采取以下操作来解决此问题: 解决方式一:使用管理员权限运行命令行工具 有时候我们在安装依赖时,会因为权限不够而安装失败。可…

    node js 2023年6月8日
    00
  • Node.js 中的 fs 模块与Path模块方法详解

    下面是“Node.js 中的 fs 模块与 Path 模块方法详解”攻略: Node.js 中的 fs 模块与 Path 模块方法详解 什么是 fs 模块? fs 模块被称为文件系统模块,是 Node.js 内置模块之一,它提供了读写文件的能力。它通过提供诸如读取、写入、更改、删除等操作文件的 API 来帮助我们完成文件系统的操作。 常用 fs 模块方法 这…

    node js 2023年6月8日
    00
  • Nodejs学习笔记之NET模块

    首先我要给大家介绍的是Node.js中的NET模块,它是一个用于创建TCP服务器和客户端的核心模块。我们可以使用该模块创建各种TCP连接,并进一步使用它来实现各种网络应用,如聊天室、游戏等等。 一、创建TCP服务器 使用NET模块,我们可以很容易地创建一个TCP服务器。以下是一个简单的示例: const net = require(‘net’); const…

    node js 2023年6月8日
    00
  • 基于JavaScript实现一个简单的Vue

    下面我将为你详细讲解“基于JavaScript实现一个简单的Vue”的完整攻略。 什么是Vue Vue是一个渐进式的JavaScript框架,它被设计用于构建大型单页应用(SPA)。Vue提供组件化的开发模式,使得代码结构更加清晰易懂,提高开发效率,降低维护成本。 Vue的核心概念 在我们开始实现一个简单的Vue之前,先让我们了解一下Vue的核心概念: 数据…

    node js 2023年6月8日
    00
  • 简单谈谈node.js 版本控制 nvm和 n

    关于node.js的版本控制,一种常用的方法是使用nvm和n。下面我为大家介绍一下两种方法的使用方式。 1. 使用nvm进行node.js版本控制 1.1 安装nvm nvm是一款node.js版本管理工具,可以通过nvm来管理node.js的不同版本。在使用nvm前,需要先安装nvm。nvm的安装方式可以根据官网提供的方式进行安装,也可以在Linux/Ma…

    node js 2023年6月9日
    00
  • nodejs如何获取指定路径下所有的文件夹名或类型

    首先,我们需要使用Node.js中的fs和path核心模块来获取指定路径下的文件夹名或类型。 获取指定路径下所有文件夹名称 通过fs.readdir()方法可以读取指定路径下的所有文件和文件夹名称,但是需要注意的是,readdir()读取到的名称包括文件和文件夹,我们需要通过fs.stat()方法来判断哪些是文件夹。 const fs = require(‘…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部