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

下面是关于“原生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.js中如何合并两个复杂对象详解

    合并两个复杂对象在Node.js中是一种常见需求。下面是合并两个复杂对象的完整攻略: 步骤一:安装lodash模块 在Node.js中,可以使用lodash模块来合并两个复杂对象。因此,在进行对象合并之前,需要保证该模块已安装。 npm install –save lodash 步骤二:导入lodash模块 在对象合并之前,需要将lodash模块导入到No…

    node js 2023年6月8日
    00
  • 微信小程序 Buffer缓冲区的详解

    微信小程序 Buffer缓冲区的详解 1. 什么是 Buffer 在 JavaScript 中,Buffer 是一个用于处理二进制数据的类。它的实例类似于整数数组,但它用于在 TCP 流、文件系统操作、以及其他上下文中处理原始的二进制数据。在 Node.js 中经常使用 Buffer 类来处理数据流,它是 Node.js 中处理网络数据流的重要基础。 在微信…

    node js 2023年6月8日
    00
  • JavaScript版的TwoQueues缓存模型

    让我来详细讲解一下JavaScript版的TwoQueues缓存模型,包含示例说明。 什么是TwoQueues缓存模型 TwoQueues缓存模型是一种常见的缓存淘汰策略。在TwoQueues缓存模型中,有两个队列,一个是使用队列(hot queue),一个是空闲队列(cold queue)。 当一个缓存项被访问时,它会从cold queue中被移到hot …

    node js 2023年6月8日
    00
  • Javascript JSQL,SQL无处不在,

    JavaScript JSQL是一种使用JavaScript语言实现的数据库访问接口。它通过封装SQL命令,提供了一种直接使用JavaScript语言进行数据库访问的方式。很多JavaScript的开发者已经在使用JSQL来处理数据库了,本文将讲解如何在项目中使用JSQL,包括连接数据库、创建表和查询数据库等操作。 连接数据库 要使用JSQL,首先需要连接你…

    node js 2023年6月8日
    00
  • 推荐 21 款优秀的高性能 Node.js 开发框架

    下面是详细讲解“推荐 21 款优秀的高性能 Node.js 开发框架”的完整攻略: 概述 Node.js 是一款基于 V8 引擎的开源 JavaScript 运行时,允许开发者使用 JavaScript 在后端实现 Web 应用、网络工具、命令行工具等。Node.js 的高性能特征使其成为了现如今流行的后端开发利器之一。选择一个优秀的 Node.js 开发框…

    node js 2023年6月8日
    00
  • Node.js开发静态资源服务器

    Node.js是一种基于Chrome V8引擎的JavaScript运行环境,可以用于开发高效的网络应用程序。在使用Node.js进行Web开发时,经常需要开发一个静态资源服务器来提供网站所需的静态文件(如HTML、CSS、JavaScript、图片等),以加快网站的访问速度和提高用户体验。 下面是基于Node.js开发静态资源服务器的完整攻略: 步骤一:搭…

    node js 2023年6月8日
    00
  • Node.js开发指南中的简单实例(mysql版)

    以下是 “Node.js开发指南中的简单实例(mysql版)” 的完整攻略: 需求分析 首先,我们需要分析这个简单实例的需求,该实例需要实现一个简单的博客系统。博客系统需要能够实现用户的注册、登录、退出等基本功能。用户登录成功后,可以查看、创建、修改、删除自己的博客文章。 技术架构 下面,我们来简要介绍一下这个博客系统的技术架构: 前端:使用 Bootstr…

    node js 2023年6月8日
    00
  • Vite + React从零开始搭建一个开源组件库

    下面是详细讲解“Vite + React从零开始搭建一个开源组件库”的完整攻略。 一、前置知识 在学习“Vite + React从零开始搭建一个开源组件库”之前,需要具备以下知识: 基础的HTML、CSS、JavaScript的知识 熟悉React框架及其生态圈 熟悉ES6语法以及模块化编程思想 熟悉npm包管理工具 熟悉Git版本控制工具 二、搭建项目 1…

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