原生ajax发起post请求,原生Ajax发送get、post请求每一步

说明

发送Ajax的请求的核心对象是XMLHttpRequest,因此我们需要了解该对象的相关属性和方法

方法(图一)

51f0de25196dc06347d002556dcb9fc0.png

属性(图二)

eb3ac6fe478b17f8ab677ec9c81f1c0e.png

第一步:创建 XMLHttpRequest对象,下面都简写为 xhr对象

由于XMLHttpRequest不兼容IE6及以下的浏览器,因此在IE6及以下的浏览器不能使用XMLHttpRequest创建 xhr对象,使用ActiveXObject('Microsoft.XMLHTTP')代替。但是我写好之后测试了一波,IE5好像支持 XMLHttpRequest对象,IE6没测,因此技术不断更新,现在看到的不一定是对的。还需要自己动手测试以下。

var xhr = null

if (window.XMLHttpRequest){//如果浏览器存在这个对象 则以这种方式创建

xhr = new XMLHttpRequest()

} else{//否则 以下面这种方式

xhr = new ActiveXObject('Microsoft.XMLHTTP')

}

//或者使用 try catch 这里与上面的 if 语句 效果等同

try{

xhr = new XMLHttpRequest()

}catch(e){

xhr = new ActiveXObject('Microsoft.XMLHTTP')

}

第二步:准备发送,调用open方法

xhr.open(type, url, boolean),该方法具有三个参数。

type:请求的方式,可以是以下这些值: GET、POST、DELETE、OPTIONS、HEAD、PUT、TRACE、CONNECT,用的最多的是 GET、POST请求。

url: 请求路径和参数。路径和参数以?为分割线例如 : http://localhost:3000?uname="车神-黄杰&age=23"

boolean:操作方式,true(默认值) --->异步发送请求 false ---> 同步发送请求。

第三步:发送,调用send方法

xhr.send()

GET请求:最好传入null,有些浏览器约定好了,在发送GET请求时不传入null会报错。

POST请求:传入向服务器发送的数据。

向服务器发送数据

GET请求

此时数据由open方法传入,数据拼接在第二个参数请求路径的后面 以?为分隔符。

在IE浏览器中,请求参数存在中文会出现乱码 此时需要对请求参数进行编码 使用encodeURI(parme)解决兼容性。

encodeURI() 可把字符串作为 URI 进行编码 但是对于一些ASCLL的字母或者数字不会进行编码, 一些特殊的符号也不会进行编码 例如_ . ! ~ * ' ( ) 等

例如encodeURI('宿舍') 此时结果为 %E5%AE%BF%E8%88%8D 。

var parme = 'username=' + "车神-黄杰" + '&paw='+ 123

//在IE浏览器会出现乱码

//xhr.open('GET', 'http://localhost:3000/?' + parme, true)

xhr.open('GET', 'http://localhost:3000/?' + encodeURI(parme), true)

POST请求

在发送GET请求的时候,send()方法传入null,而在POST请求中,传入需要发送给服务器的数据。

此时不需要对请求字符串进行编码,但是需要设置Content-Type为application/x-www-form-urlencoded。

var parme = 'username=' + "车神-黄杰" + '&paw='+ 123

//调用open方法

xhr.open('POST', 'http://localhost:3000/', true)

//设置Content-Type

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

//发生数据

xhr.send(parme)

第四步:处理请求

绑定 onreadystatechange事件

readyState 为 4说明收到数据

status 为 200 表示数据完整

xhr.onreadystatechange = function () {

// 状态为4 表示收到数据

if (xhr.readyState === 4){

//状态码为 200 表示数据完整

if (xhr.status === 200){

//接收并处理数据

var rel = xhr.responseText

}

}

}

示例

主要的事件 onreadystatechange,属性readyState、status,请看图一、图二即可

GET

getAjax()

function getAjax(){

//发送Ajax的步骤

var parme = 'username=' + "车神-黄杰" + '&paw='+ 123

//第一步: 创建XMLHttpRequest对象

var xhr = null

if (window.XMLHttpRequest){//如果浏览器存在这个对象 则以这种方式创建

xhr = new XMLHttpRequest()

} else{//否则 以下面这种方式

xhr = new ActiveXObject('Microsoft.XMLHTTP')

}

//第二步 准备发送 调用opent方法 (有三个参数) 拼接数据

xhr.open('GET', 'http://localhost:3003/?' + encodeURI(parme), true)

//第三步 发送 调用send方法

xhr.send(null)//get请求 为null

//第四步处理请求 绑定事件onreadystatechange

xhr.onreadystatechange = function () {

// 状态为4 表示收到数据

if (xhr.readyState === 4){

//状态码为 200 表示数据完整

if (xhr.status === 200){

//接收并处理数据

var rel = xhr.responseText

//接收的是json数据 使用JSON.parse()转为js对象

console.log("GET: " + JSON.parse(rel).msg)

}

}

}

}

POST

postAjax()

function postAjax(){

//发送Ajax的步骤

var parme = 'username=' + "车神-黄杰" + '&paw='+ 123

//第一步: 创建XMLHttpRequest对象

var xhr = null

if (window.XMLHttpRequest){//如果浏览器存在这个对象 则以这种方式创建

xhr = new XMLHttpRequest()

} else{//否则 以下面这种方式

xhr = new ActiveXObject('Microsoft.XMLHTTP')

}

//第二步 准备发送 调用opent方法 (有三个参数) 拼接数据

xhr.open('POST', 'http://localhost:3003/?', true)

//第三步 发送 调用send方法

//设置Content-Type

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

xhr.send(parme)//get请求 为null

//第四步处理请求 绑定事件onreadystatechange

xhr.onreadystatechange = function () {

// 状态为4 表示收到数据

if (xhr.readyState === 4){

//状态码为 200 表示数据完整

if (xhr.status === 200){

//接收并处理数据

var rel = xhr.responseText

//接收的是json数据 使用JSON.parse()转为js对象

console.log("POST: " + JSON.parse(rel).msg)

}

}

}

}

node简单服务器 只是部分代码

//GET

router.get('/', (req, res) =>{

res.json({"msg": "发生成功", "code": 1})

})

//POST

router.post('/', (req, res) =>{

res.json({"msg": "发生成功", "code": 1})

})

打印结果

a98da8e9999f987952df19b25d6b4358.png

Ajax发送PUT/DELETE请求时出现错误的原因及解决方案

本文讲什么? 大家应该都知道.在HTTP中,规定了很多种请求方式,包括POST,PUT,GET,DELETE等.每一种方式都有这种方式的独特的用处,根据英文名称,我们能够很清楚的知道DELETE方法的 ...

原生Ajax发送请求

ajax  get&post 1.使用get发送请求,会有请求缓存 1)什么叫请求缓存,请求信息相同浏览器不会再向服务器发送请求,导致访问服务器失败. 2)解决:将随机数添加到请求路径后面参数 ...

Ajax发送和接收请求

首先Ajax的不刷新页面提交数据 基本上浏览器能接收的信息,Ajax都可以接收,ex:字符串,html标签,css标签,xml格式内容,json格式内容等等..... / ...

手动(原生ajax)和自动发送ajax请求 伪ajax(Ifrname)

自动发送  ---> 依赖jQuery文件 实例-->GET请求: function AjaxSubmit() { $.ajax({ url:'/data', type:"GET ...

原生js发送ajax请求

堕落了一阵子了,今天打开博客,发现连登录的用户名和密码都不记得了.2016年已过半,不能再这么晃荡下去了. 参加了网易微专业-前端攻城狮 培训,目前进行到大作业开发阶段,感觉举步维艰.但是无论如何,不 ...

原生JS实现ajax 发送post请求

1. [代码]原生JS实现ajax 发送post请求 var oStr = ''; var postData = {}; var oAjax = null; //post ...

原生JS发送Ajax请求、JSONP

一.JS原生Ajax Ajax=异步Javascript+XML: ajax是一种数据请求的方式,不需要刷新整个页面.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. ajax的核心 ...

原生JS实现Ajax及Ajax的跨域请求

前  言          如今,从事前端方面的程序猿们,如果,不懂一些前后台的数据交互方面的知识的话,估计都不太好意思说自己是程序猿.当然,如今有着许多的框架,都有相对应的前后台数据交互的方法. ...

原生ajax的请求函数

ajax:一种请求数据的方式,不需要刷新整个页面:ajax的技术核心是 XMLHttpRequest 对象:ajax 请求过程:创建 XMLHttpRequest 对象.连接服务器.发送请求.接收响应 ...

随机推荐

NOIP1999邮票面值设计[搜索|DP]

题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤40)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX之间的每一个邮资值都能得到 ...

Linux下Mongodb安装和启动配置

1.下载安装包 wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.2.tgz 下载完成后解压缩压缩包 tar zxf mongod ...

2016CCPC东北地区大学生程序设计竞赛 1005 HDU5926

链接http://acm.hdu.edu.cn/showproblem.php?pid=5926 题意:给我们一个矩阵,问你根据连连看的玩法可以消去其中的元素 解法:连连看怎么玩,就怎么写,别忘记边界 ...

转载:CancellationToken

http://www.cnblogs.com/Abbey/archive/2011/09/12/2174208.html 最近在学习.NET中的线程同步.其中一个重要的技术叫线程的取消(中止),涉及的 ...

Python连接Redis连接配置

1. 测试连接: Python 2.7.8 (default, Oct 20 2014, 15:05:19) [GCC 4.9.1] on linux2 Type "help", ...

【bzoj3514】Codechef MARCH14 GERALD07加强版

hzwer上少有的几道需要建一下模的 要不是有这么几道题 我都觉得lct只会考裸题了呢 题解看hzwer吧 http://hzwer.com/4358.html 唯一蛋疼的就是为了处理0这个呵呵的位置 ...

转:Loadrunner上传文件解决办法(大文件)

最近再做一个跟海量存储相关的项目测试,需要通过LR模拟用户大量上传和下载文件,请求是Rest或Soap,同时还要模拟多种大小尺寸不一的文件 通常情况下,都是使用简单的post协议即可: 方法一: we ...

Leetcode题解(23)

69. Sqrt(x) 题目 分析,题目实现求一个int数的平方根,最暴力的算法就是逐个遍历,从1开始到x,判断是否有一个数i,其中满足i*i<=x,并且(i+1)*(i+1)>x;这个算 ...

&lbrack;Android Pro&rsqb; AndroidStudio IDE界面插件开发(进阶篇之Editor)

转载请注明出处:[huachao1001的专栏:http://blog.csdn.net/huachao1001/article/details/53885981] 我们开发AndroidStudio ...

最小生成树(prime算法 &amp&semi; kruskal算法)和 最短路径算法(floyd算法 &amp&semi; dijkstra算法)

一.主要内容: 介绍图论中两大经典问题:最小生成树问题以及最短路径问题,以及给出解决每个问题的两种不同算法. 其中最小生成树问题可参考以下题目: 题目1012:畅通工程 http://ac.jobdu ...

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值