Ajax提交底层原型XMLHttpRequest
相信接触过ajax的都觉得其post,get提交很方便,那么他是怎么实现的呢?基于此我们就不得不谈到js中的XMLHttpRequest对象.
其中w3c中是这样解释的:
XMLHttpRequest 对象用于在后台与服务器交换数据。
XMLHttpRequest 对象是开发者的梦想,因为您能够:
- 在不重新加载页面的情况下更新网页
- 在页面已加载后从服务器请求数据
- 在页面已加载后从服务器接收数据
- 在后台向服务器发送数据
所有现代的浏览器都支持 XMLHttpRequest 对象。
XMLHttpRequest 对象的方法主要有:
abort()方法
request.abort()
中断当前对象的HTTP请求.
open方法
request.open(method,url,sync);
初始化HTTP连接请求对象,设置请求方法,地址,认证信息.method可以定义为"POST","GET"两种
send 方法
request.send("args");
向服务器发送一个HTTP请求,并获取返回结果.
setRequestHeader方法:
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
在请求header中设置Header/Value值对并发送到服务器端.
XMLHttpRequest 对象的属性主要有:
onreadystatechange
设置请求对象状态readystate改变时要调用的函数对象;
readyState
请求对象的状态值,含义如下:
0 - 请求对象被创建,但未初始化,即open方法未调用
1 - 装载中,open方法已调用,send方法未调用
2 - 已装载,send方法已调用,但还未获得Header信息
3 - 交互中,已获取了部分信息,这时调用responseText将得到不完整信息,会返回错误
4 - 所有数据已接收完成,可用responseText或responseBody得到完整数据
responseBody
表示从HTTP响应得到的返回原始信息,内容的编码方式决定于请求的服务器端(UTF-8, UCS-2, UCS-4, Shift_JIS等)
responseText
HTTP请求返回数据体的字符串表示,缺省情况下用utf-8编码后返回,如果返回内容中有中文,服务器端的数据必须用utf-8编码,否则就会出现乱码。
responseStream
HTTP请求返回数据的流对象,该对象实现IStream接口.
responseXML
返回XML格式的数据对象. 服务器端返回数据为XML格式数据时可用.服务器端用动态语言生成xml时,必须设置content-type为text/xml,否则客户端得到的responseXML为空
status
HTTP返回代码.
200 - 成功
404 - 错误请求
500 - 服务器内部错误,等等. 详见HTTP协议.
statusText
HTTP返回状态文本描述.
实例POST代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>XMLHttpRequest测试</title>
<script type="text/javascript">
window.onload=function(){
//监听a中的click事件
document.getElementsByTagName("a")[0].onclick=function(){
//创建XMLHttpRequest对象(注意大小写)
//var request =window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
//考虑兼容性
//var request=init();
var request=new XMLHttpRequest();
function init(){
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
}
else if (window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
//添加时间戳 起到禁用缓存的效果
var url=this.href;
//+"?time="+new Date();
//请求方式为GET请求
//var method='GET';
//请求方式为POST请求
var method="POST";
//准备发送请求(就像汽车发动机点火一样)
request.open(method,url,true);
//如果是Post请求,需要在此处添加setheader,格式如下:
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
//发送请求(汽车运行..) //request.accept="text/html";
//request状态变化
request.onreadystatechange=function(){
//判断响应是否完成
if (request.readyState==4) {
//判断响应是否可用
if(request.status==200){
//打印响应信息
console.info(request.responseText);
}
}
};
var age=10;
request.send("age="+age);
//禁用a跳转
return false;
}; };
</script>
</head> <body>
<a href="hw.txt">点击我</a>
</body> </html>
hw.txt内容
Hello Ajax!!!^_^
实际效果:

PS:get方式提交这里就不赘述了.单值得注意的是post提交的时候要在open之后send之前添加header属性值.另外还要注意的是post提交依赖服务器的支持,否则不能consol数据,报500,内部服务器错误.
Ajax提交底层原型XMLHttpRequest的更多相关文章
- 使用ajax提交form表单,包括ajax文件上传
前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){ ... },"json"); 又或者是这样的aja ...
- PHP 判断是否为Get/Post/Ajax提交
<?php PHP 判断是否为Get/Post/Ajax提交 /** * 是否是AJAx提交的 * @return bool */ function isAjax(){ if(isset($_S ...
- jquery的ajax提交时loading提示的处理方法
方法1:使用ajaxStart方法定义一个全局的“加载中...”提示 $(function(){ $("#loading").ajaxStart(function(){ ...
- python_way day21 Django文件上传Form方式提交,原生Ajax提交字符处啊,Django文件上传之原生Ajax方式、jQuery Ajax方式、iframe方式,Django验证码,抽屉示例,
python_way day21 1.Django文件上传至Form方式 2.原生Ajax文件上传提交表单 使用原生Ajax好处:不依赖jquery,在发送一个很小的文件或者字符串的时候就可以用原生A ...
- 关于ajax提交的公共接口的一大用处
在项目框架搭建的时候,就写了ajax提交的公共接口,是想统一的日志和处理ajax返回的错误信息. 今天,却又帮我解决了另外一个问题:每次点开某个页面,有一个ajax请求总是会调用两次,于是打开chro ...
- 使用ajax提交form表单(转)
前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){ ... },"json"); 又或者是这样的aja ...
- ajax提交表单、ajax实现文件上传
ajax提交表单.ajax实现文件上传,有需要的朋友可以参考下. 方式一:利用from表单的targer属性 + 隐藏的iframe 达到类似效果, 支持提交含有文件和普通数据的复杂表单 方式二:使用 ...
- 向后台提交数据:通过form表单提交数据需刷新网页 但通过Ajax提交数据不用刷新网页可通过原生态Ajax或jqueryAjax。Ajax代码部分
原生态Ajax提交表单:需要借助XMLHttpRequest对象的open,要收通过post发送请求还要setRequsetHeader,然后把数据发送给后端,代码如下 目录结构 index.py代码 ...
- spring mvc接收ajax提交的JSON数据,并反序列化为对象
需求:spring mvc接收ajax提交的JSON数据,并反序列化为对象,代码如下: 前台JS代码: //属性要与带转化的对象属性对应 var param={name:'语文',price:16}; ...
随机推荐
- requirejs实现模块化
使用requirejs实现模块化编程 > 序言 - -# 公司大了,业务多了,前端代码量也逐渐增大,我们渐渐的依赖js实现的交互越来越多,长期以来会导致我们的代码维护越来越困难,所以依赖的插件也 ...
- JavaScript之数组去重
前言:昨天看到了别人发的帖子,谈到了面试题中经常出现的数组去重的问题.作为一个热爱学习.喜欢听老师话的好孩纸,耳边忽然想起来高中老师的谆谆教导:不要拿到题就先看答案,要先自己思考解答,然后再对照答案检 ...
- 【LaTeX排版】LaTeX纸排版<两>
1.文件夹的生成 直接使用命令\tableofcontents就可以. 其默认格式例如以下: 我们会发现.这种格式不一定是我们所期望的. 比方说,我们也希望章标题与页码之间也有点连线,而且也希 ...
- EpPlus读取生成Excel帮助类+读取csv帮助类+Aspose.Cells生成Excel帮助类
大部分功能逻辑都在,少量自定义异常类和扩展方法 ,可用类似代码自己替换 //EpPlus读取生成Excel帮助类+读取csv帮助类,epplus只支持开放的Excel文件格式:xlsx,不支持 xls ...
- C++达到String分类
这是一个非常经典的面试题,能够测试学生很短的时间C++法师是综合,答案应包含C++大多数知识类,保证书String符类可以完成值.抄.的变量和其它函数的定义. #include<iostream ...
- 杭电1162Eddy's picture
Eddy's picture Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Tota ...
- fpga该驱动器调试dev_dbg 无输出
近期需要调试fpga驾驶,整个是非常蛋疼.dev_dbg 我想用这个作为没有成功调试输出,它已被彻底打垮! 反射... 现在基于以下设置是不相关的打印,和网上说的有些出入,问题还得研究下. 驱动程序调 ...
- sgu 194 被动散热器具有最大流量的上限和下限(最大流量模板dinic加上优化)
模板类型的题详细參考国家集训队论文:http://wenku.baidu.com/view/0f3b691c59eef8c75fbfb35c.html 參考博客:http://blog.csdn.ne ...
- node.js高效操作mongodb
node.js高效操作mongodb Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为Jav ...
- INF 右安装驱动程序和卸载
INF 右键安装驱动以及卸载 之前写过一篇文章是关于INF文件具体解释的.大家能够參看INF文件具体解释,这次写的是关于INF右键安装,这样比較方便. 卸载的话也是一句话.能够大大降低安装时间: 先将 ...