后台代码:

class AjaxHanlder(tornado.web.RequestHandler):
def get(self):
print(self.get_argument('type',None))
if self.get_argument('type',None):
self.write("get ok")
else:
self.render('ajax_test.html') def post(self, *args, **kwargs):
self.write("post ok")

前端ajax:

为了兼容各个浏览器都有ajax方法

    function GetXhr(){
var xhr=null;
if(XMLHttpRequest){
xhr=new XMLHttpRequest();
}else{
xhr=new ActiveXObject("Microsoft.XMLHTTP");
}
return xhr;
}

其中get请求一般都把数据放到url中,而不是send()中

function XhrGetRequest(){
var xhr=GetXhr();
//定义回调函数
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
document.getElementsByClassName('reponse')[0].innerHTML=xhr.responseText;
}
}
//指定连接方式和地址---文件方式
xhr.open('get',"/ajax?type=1&kk=2",true);
//发出请求
xhr.send(null);
}

只有post请求时,需要将数据放到send()中传递,并且需要设置请求头

function XhrPostRequest(){
var xhr=GetXhr();
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
document.getElementsByClassName('reponse')[0].innerHTML=xhr.responseText;
}
}
xhr.open('post','/ajax',true);
//post需要设置请求头
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset-UTF-8");
//发送请求
xhr.send("type=1&kk=2");
}

使用案例:

<body>
<form method="post" action="login">
用户名:<input id="user" type="text" name="username">
密码:<input id="pwd" type="password" name="password">
<input type="checkbox" id="auto" name="auto" value="1"/>七天免登录
<input type="button" onclick="SubmitForm();" value="登录">
<span class="err"></span>
</form>
</body>
</html>
<script>
var xhr=null; function SubmitForm(){
var username=document.getElementById("user").value;
var pwd=document.getElementById('pwd').value;
var chkEle=document.getElementById('auto');
var chk=null;
if(chkEle.checked==true)
chk=1;
else
chk=0; xhr=new XMLHttpRequest();
/*参数 发送方式 发送地址 是否异步*/
//xhr.open('GET',"/login",true);
xhr.open("POST","/login",true);
//当readystate值改变时会自动去触发对应函数,先对这个值进行判断,在决定对应的函数
//0.未初始化,尚未调用open
//1.启动,调用了open未调用send
//2.发送,调用了send,未收到响应
//3.接收,已经接收到了部分响应消息
//4.完成,已经接收到所有的数据 xhr.onreadystatechange =func;
//setRequestHeader(String header,String value)设置请求头
//getAllResponseHeaders()获取所有响应头
//getResponseHeader(String header)获取响应头中指定的header的值
//void abort()终止请求 //post发送数据需要设置请求头
xhr.setRequestHeader('content-type','application/x-www-form-urlencoded; charset-UTF-8')
//用于发送数据
xhr.send('username='+username+';password='+pwd+';auto='+chk); //String responseText 服务器返回的数据字符串类型 //XmlDocument responseXML 服务器返回的数据(xml对象) //Number states 状态码 //String statesText 状态码对应文本
} function func(){
if(xhr.readyState == 4){
console.log(xhr.responseText);
var data=xhr.responseText;
var ret_dict = JSON.parse(data);
if(ret_dict.status){
//登录成功
}else{
//登录失败
var ele=document.getElementsByClassName('err')[0];
ele.innerHTML="<h1 style=\"color:red;\">"+ret_dict.message+"</h1>"
}
}
}
</script>

open(请求方式, URL, 是否异步)

send(请求体)

onreadystatechange,指定监听函数,它会在xmlHttp对象的状态发生变化时被调用

readyState,当前xmlHttp对象的状态,其中4状态表示服务器响应结束

status:服务器响应的状态码,只有服务器响应结束时才有这个东东,200表示响应成功;

responseText:获取服务器的响应体

代码实例:

<div>
<table border="">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>班级</th>
<th>编辑</th>
</tr>
</thead>
<tbody>
<tr><td></td>
<td>李四</td>
<td></td>
<td>男</td>
<td>C++工程师</td>
<td><a onclick="XhrPostRequest(this);">删除</a>|<a href="/edit_student.html?nid=4">编辑</a></td>
</tr>
<tr><td></td>
<td>fas</td>
<td></td>
<td>男</td>
<td>Python工程师</td>
<td><a onclick="XhrPostRequest(this);">删除</a>|<a href="/edit_student.html?nid=5">编辑</a></td>
</tr>
</tbody>
</table>
</div>
</body>
<script>
var xhr=null
var thr=null
function GetXhr(){
if(XMLHttpRequest){
var Xh = new XMLHttpRequest();
}else{
Xh = new ActiveXObject('Microsoft.XMLHTTP');
}
return Xh
} function call_func(){
if(xhr.readyState == 4){
var data=xhr.responseText;
var ret_dict = JSON.parse(data);
if(ret_dict.status){
//登录成功
alert("删除成功")
thr.parentElement.parentElement.remove()
}
}
} function XhrPostRequest(ths){
thr=ths
xhr=GetXhr();
xhr.onreadystatechange = call_func;
var id=thr.parentElement.parentElement.childNodes[0].textContent;
xhr.open('get','/del_student.html?nid='+id);
xhr.send();
}
</script>

关于更多信息,以及jquery中ajax使用可以参考

更多请看:原生ajax中get和post请求

更多请看:http://www.cnblogs.com/yuanchenqi/articles/5997456.html

>这里

原生ajax中get和post请求的更多相关文章

  1. Django框架 之 基于Ajax中csrf跨站请求伪造

    Django框架 之 基于Ajax中csrf跨站请求伪造 ajax中csrf跨站请求伪造 方式一 1 2 3 $.ajaxSetup({     data: {csrfmiddlewaretoken: ...

  2. ajax中Post和Get请求方式的区别?

    ajax中Post和Get请求方式的区别: 1.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示. 2.Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的 ...

  3. AJax中post与get请求注意事项

    在使用ajax提交表单时,一定要区分提交按钮的形式和数据表头的设置,实例如下: GET请求: HTML代码: <!doctype html> <html lang="en& ...

  4. ajax中的setRequestHeader设置请求头

    1.问题引发点: 前不久发现一个问题: 前端并没有设置请求头信息里面的Accept-Encoding:gzip...但是在请求头中可以明显的看到Accept-Encoding:gzip, deflat ...

  5. 资料汇总--Ajax中Put和Delete请求传递参数无效的解决方法(Restful风格)【转】

    开发环境:Tomcat9.0 在使用Ajax实现Restful的时候,有时候会出现无法Put.Delete请求参数无法传递到程序中的尴尬情况,此时我们可以有两种解决方案:1.使用地址重写的方法传递参数 ...

  6. Ajax中Put和Delete请求传递参数无效的解决方法(Restful风格)

    本文装载自:http://blog.csdn.net/u012737182/article/details/52831008    感谢原文作者分享 开发环境:Tomcat9.0 在使用Ajax实现R ...

  7. 原生Ajax发送get、post请求每一步

    说明 发送Ajax的请求的核心对象是XMLHttpRequest,因此我们需要了解该对象的相关属性和方法 方法(图一) 属性(图二) 第一步:创建 XMLHttpRequest对象,下面都简写为 xh ...

  8. 原生ajax中readyState中的含义以及HTTP协议状态码的含义

    xmlhttp.readyState的值及解释: 0:请求未初始化(还没有调用 open()). 1:请求已经建立,但是还没有发送(还没有调用 send()). 2:请求已发送,正在处理中(通常现在可 ...

  9. ajax中加上AntiForgeryToken防止CSRF攻击

    经常看到在项目中ajax post数据到服务器不加防伪标记,造成CSRF攻击 在Asp.net Mvc里加入防伪标记很简单在表单中加入Html.AntiForgeryToken()即可. Html.A ...

随机推荐

  1. HDOJ2025_查找最大元素

    一道简单题 HDOJ2025_查找最大元素 #include<stdio.h> #include<stdlib.h> #include<ctype.h> #incl ...

  2. Spring整合SpringMVC

    整合:把在springMVC配置文件中的spring提取出来整合为另一份配置文件 希望: 1).Spring的配置文件只是用来配置和业务逻辑有关的功能(数据源.事务控制.切面....) 2).Spri ...

  3. vue 单文件 样式写了scoped 不能覆盖框架原有样式的解决办法

    vue 单文件 样式写了scoped 不能覆盖框架原有样式的解决办法 在vue 里面<style scoped></style> 是为了让样式只影响本身自己组件的样式,不改变全 ...

  4. Jfrog Artifactory 创建docker 镜像仓库以及 push 镜像到 该仓库.

    1. 安装aitifactory 以及 启动 使用30天有效期激活 不在阐述. 2. 登录artifactory username:admin password:password 3. 创建 仓库 在 ...

  5. windows上面链接使用linux上面的docker daemon

    1. 修改linux 上面的 docker的 配置文件. vim /usr/lib/systemd/system/docker.service 注意 这个是centos的路径 发现ubuntu的路径不 ...

  6. HAProxy+keepalived+MySQL 实现MHA中slave集群负载均衡的高可用

    HAProxy+keepalived+MySQL实现MHA中slave集群的负载均衡的高可用 Ip地址划分: 240    mysql_b2 242    mysql_b1 247    haprox ...

  7. NVIDIA面目生成器再做突破

    导读 NVIDIA创建的AI系统“GAN”可以通过对图像数据库的学习,来随机生成超逼真人脸照片而一炮走红,经过长时间的研发与晚上目前这套系统已经有了极大的进步.除了可以自主学习之外,生成的内容逼真,让 ...

  8. BZOJ4808马——二分图最大独立集

    题目描述 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗 称"蹩马腿"),则不允许走过去.为了简化问题, ...

  9. BZOJ4012 HNOI2015开店(树链剖分+主席树)

    考虑这样一个问题:一棵树初始全是白点,有两种操作:把一个点染黑:询问某点到所有黑点的距离之和. 注意到树上两点x和y的距离为depth[x]+depth[y]-depth[lca(x,y)]*2.要求 ...

  10. MT【215】集合中元素个数

    设$M=\{1,2,3\cdots,2010\}$,$A$是$M$的子集且满足条件:当$x\in A$时$15x\notin A$,则$A$中的元素的个数最多是______ 分析:由于$x,15x,( ...