前端学习(1431):ajax封装六

ajax.js

// 引入express框架
const express = require('express');
// 路径处理模块
const path = require('path');
const bodyParser = require('body-parser');
const fs = require('fs');
// 创建web服务器
const app = express();app.use(bodyParser.json());// 静态资源访问服务功能
app.use(express.static(path.join(__dirname)));// 对应01html文件
app.get('/first', (req, res) => {res.send('Hello, Ajax');
});// 对应02html文件
app.get('/responseData', (req, res) => {res.send({ "name": "zs" });
});// 对应03html文件
app.get('/get', (req, res) => {res.send(req.query);
});// 对应04html文件
app.post('/post', (req, res) => {res.send(req.body);
});// 对应05html文件
app.post('/json', (req, res) => {res.send(req.body);
});// 对应06html文件
app.get('/readystate', (req, res) => {res.send('hello');
});// 对应07html文件
app.get('/error', (req, res) => {//console.log(abc);res.status(400).send('not ok');
});// 对应08html文件
app.get('/cache', (req, res) => {fs.readFile('./test.txt', (err, result) => {res.send(result);});
});// 监听端口
app.listen(3000);
// 控制台提示输出
console.log('服务器启动成功');

ajax10.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>Document</title>
</head><body><script type="text/javascript">function ajax(options) {// 存储的是默认值var defaults = {type: 'get',url: '',data: {},header: {'Content-Type': 'application/x-www-form-urlencoded'},success: function() {},error: function() {}};// 使用options对象中的属性覆盖defaults对象中的属性Object.assign(defaults, options);// 创建ajax对象var xhr = new XMLHttpRequest();// 拼接请求参数的变量var params = '';// 循环用户传递进来的对象格式参数for (var attr in defaults.data) {// 将参数转换为字符串格式params += attr + '=' + defaults.data[attr] + '&';}// 将参数最后面的&截取掉 // 将截取的结果重新赋值给params变量params = params.substr(0, params.length - 1);// 判断请求方式if (defaults.type == 'get') {defaults.url = defaults.url + '?' + params;}/*{name: 'zhangsan',age: 20}name=zhangsan&age=20*/// 配置ajax对象xhr.open(defaults.type, defaults.url);// 如果请求方式为postif (defaults.type == 'post') {// 用户希望的向服务器端传递的请求参数的类型var contentType = defaults.header['Content-Type']// 设置请求参数格式的类型xhr.setRequestHeader('Content-Type', contentType);// 判断用户希望的请求参数格式的类型// 如果类型为jsonif (contentType == 'application/json') {// 向服务器端传递json数据格式的参数xhr.send(JSON.stringify(defaults.data))} else {// 向服务器端传递普通类型的请求参数xhr.send(params);}} else {// 发送请求xhr.send();}// 监听xhr对象下面的onload事件// 当xhr对象接收完响应数据后触发xhr.onload = function() {// xhr.getResponseHeader()// 获取响应头中的数据var contentType = xhr.getResponseHeader('Content-Type');// 服务器端返回的数据var responseText = xhr.responseText;// 如果响应类型中包含applicaition/jsonif (contentType.includes('application/json')) {// 将json字符串转换为json对象responseText = JSON.parse(responseText)}// 当http状态码等于200的时候if (xhr.status == 200) {// 请求成功 调用处理成功情况的函数defaults.success(responseText, xhr);} else {// 请求失败 调用处理失败情况的函数defaults.error(responseText, xhr);}}}ajax({url: 'http://localhost:3000/responseData',success: function(data) {console.log('这里是success函数');console.log(data)}})/*请求参数要考虑的问题1.请求参数位置的问题将请求参数传递到ajax函数内部, 在函数内部根据请求方式的不同将请求参数放置在不同的位置get 放在请求地址的后面post 放在send方法中2.请求参数格式的问题application/x-www-form-urlencoded参数名称=参数值&参数名称=参数值name=zhangsan&age=20application/json{name: 'zhangsan', age: 20}1.传递对象数据类型对于函数的调用者更加友好2.在函数内部对象数据类型转换为字符串数据类型更加方便*/</script>
</body></html>

ajax1.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>Document</title>
</head><body><script type="text/javascript">// 1.创建ajax对象var xhr = new XMLHttpRequest();// 2.告诉Ajax对象要向哪发送请求,以什么方式发送请求// 1)请求方式 2)请求地址xhr.open('get', 'http://localhost:3000/responseData');// 3.发送请求xhr.send();// 4.获取服务器端响应到客户端的数据xhr.onload = function() {// console.log(typeof xhr.responseText)// 将JSON字符串转换为JSON对象var responseText = JSON.parse(xhr.responseText);// 测试:在控制台输出处理结果console.log(responseText)// 将数据和html字符串进行拼接var str = '<h2>' + responseText.name + '</h2>';// 将拼接的结果追加到页面中document.body.innerHTML = str;}</script>
</body></html>

运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle11连12c报权限错误,关于Oracle12c连接报错的问题

关于Oracle12c连接报错的问题这段时间因为项目原因&#xff0c;接触到了Oracle12C&#xff0c;其实问题很简单&#xff0c;就是pl/sql developer能够访问数据库服务端即可&#xff0c;却碰到了奇奇葩葩的问题&#xff0c;现分享一下。1、在java端报Ora-12505错误&#xff0c;即…

前端学习(1433):vue是什么

#### 1.1 Vue是什么> Vue.JS是优秀的前端 JavaScript 框架 > > react/angular/vue库和框架的区别:- 库(如jQuery)库是工具. 提供大量API&#xff0c;体现了封装的思想、需要自己调用这些API- 框架框架提供了一套完整解决方案,使用者要按照框架所规定的某种规范进行开发…

【100亿次的挑战】之春晚控制后台故事分享

讲师&#xff1a;freyli 项目历程简介在介绍控制后台部分之前&#xff0c;先简单回顾下项目的时间线&#xff1a; 10月25日&#xff0c;意向、调研、策划、沟通 11月24日&#xff0c;第一次技术初审 12月7日&#xff0c;互动形态框架确定&#xff0c;时间轴初现 12月15日&#…

前端学习(1434):为什么学习vue

#### 1.2 为什么要学习 Vue传统开发模式: JQueryRequireJS/SeaJSartTemplateGulp/Grunt随着项目业务场景的复杂,传统模式已无法满足需求就出现了Angular/React/Vue等框架- 企业需求 - 主流框架之一(React Angular Vue) - 易用、灵活、高效

如何简单快速调试高大上的谷歌浏览器

上一篇我们简单的将了在Ubuntu上编译chromium&#xff0c;android content_shell_apk的编译&#xff0c;一切顺利的就能生成apk。但是我们仅仅只是照搬了人家google开源的东西&#xff0c;作为一个开发者我们应带着探索的精神&#xff0c;都说它稳定&#xff0c;速度快。它为什…

前端学习(1435):vue能做什么

#### 1.3 Vue 能做什么- 最大程度上解放了 DOM 操作 - 单页web项目(SinglePageApplication项目,例如[Worktile官网](https://worktile.com/))开发 - 传统网站开发

linux下proc目录,Linux /proc目录详解

3. 例子3.1 /proc/linuxidc.comlinuxidc:~$ ls /proc/1 16819 21242 2180 2494 8768 interrupts partitions116 16820 21244 2181 2524 885 iomem sched_debug11740 17901 21245 21810 2525 acpi ioports scsi1174…

前端学习(1436):vue特点

#### 1.4 核心特性- 双向数据绑定- vue(借鉴了react的虚拟DOM,借鉴了angular双向数据绑定) - 通过 **指令** 扩展了 HTML&#xff0c;通过 **表达式** 绑定数据到 HTML - 解耦视图与数据 - 可复用**组件** - 虚拟DOM - M-V-VM - 数据驱动视图

Linux装c编译器gcc,c编译器进阶之路,linux下的gcc c编译器使用教程

c编译器的重要性不言而喻&#xff0c;从往期c编译器文章中&#xff0c;如c编译器优化、选定c编译器等&#xff0c;想必大家对c编译器均已有所了解。往期文章中&#xff0c;小编主要从宏观方面为大家讲解c编译器&#xff0c;此外对于gcc c编译器的讲解也大多基于windows。本文中…

前端学习(1437):vue一些链接

#### 1.5 一些链接[Vue官方文档](https://cn.vuejs.org/)[Vue开源项目汇总](https://github.com/opendigg/awesome-github-vue)[Vue.js中文社区](https://www.vue-js.com/)

三星s7共享网络给linux,三星Galaxy S7WiFi状态下可以共享wifi热点吗【详解】

目前&#xff0c;越来越多的智能手机都具有wifi热点的功能&#xff0c;不仅方便了不少网友之间的网络流量共享&#xff0c;而且一个wifi热点还可以共享到多个设备。而三星最新款手机三星Galaxy S7与S7 Edge在wifi热点功能的基础上&#xff0c;将wifi热点功能进行的升华&#xf…

前端学习(1439):vue的helloworld

#### 2.2 HelloWorld> 作用:将数据应用在html页面中1. body中,设置Vue管理的视图<div id"app"></div>2. 引入vue.js3. 实例化Vue对象 new Vue();4. 设置Vue实例的选项:如el、data... new Vue({选项:值});5. 在<div idapp></div>中通过…

linux c 内存分配内存,Linuxc - 操作系统内存分配

静态变量是存储在数据段的&#xff0c;在函数中可以共用。全局变量也是存储在数据段的&#xff0c;在全局中可以共用。指针变量本质上是地址&#xff0c;数组变量本质上也是地址。数组是可靠的&#xff0c;不可变的地址。指针变量是不可靠的&#xff0c;可变的。数组本质上是指…

dos安装深度linux,U盘用grub4dos引导Deepin v20 Beta iso安装的方法

下面为你带来U盘grub4dos引导和linux系统硬盘引导Deepin Linux镜像的方法&#xff0c;可适用在Deepin v20 Beta iso上&#xff0c;亲测可成功安装Deepin v20 Beta iso镜像到硬盘。下载Deepin v20 Beta iso请看&#xff1a;深度操作系统Deepin 20 Beta版本发布ISO下载。一、U盘引…

linux 定时执行kettle6,linux下使用crond定时执行kettle的job

由于第一次碰linux&#xff0c;对其不是很了解&#xff0c;导致这个问题困扰了我近一个月的时间&#xff0c;现在终于解决了&#xff0c;分享给大家。首先&#xff0c;安装jre&#xff0c;配置java环境变量(一)下载jre-6u23-linux-x64.bin下载地址&#xff1a;http://cds-esd.s…

c语言用for编程图形,C语言编程题求解

2009-05-13C语言简单的编程题求解1.从键盘输入一//将四个函数编成四个子函数了&#xff0c;在一个主函数里调用&#xff0c;你若需要&#xff0c;分别取出来用也可以。以下源代码&#xff0c;VS2005编译通过。//1。从键盘输入一行字符&#xff0c;分别统计其中字母字符和数字字…

2.3线性表的链式存储和运算—单链表应用举例

例2.5 已知单链表H&#xff0c;写一算法将其倒置。即实现如图2.22的操作。(a)为倒置前&#xff0c;(b)为倒置后。 算法思路&#xff1a;依次取原链表中的每个结点&#xff0c;将其作为第一个结点插入到新链表中去&#xff0c;指针p用来指向当前结点&#xff0c;p为空时结束。 算…

android中拖动文字实现功能,Android:图片中叠加文字,支持拖动改变位置

之所以做了这么一个Demo&#xff0c;是因为最近项目中有一个奇葩的需求&#xff1a;用户拍摄照片后&#xff0c;分享到微信的同时添加备注&#xff0c;想获取用户在微信的弹出框输入的内容&#xff0c;保存在自己的服务器上。而事实上&#xff0c;这个内容程序是无法获取的&…