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,布布扣,bubuko.com

时间: 2024-11-03 03:42:12

Ajax提交底层原型XMLHttpRequest的相关文章

关于ajax提交表单

今天主要是四个问题: 1.表单页面元素的获取: 2.按钮的值的获取: 3.按钮的值以变量提交: 4.表单的提交: 获取表单元素时用的是事件委托的方法.{犯的错误:1.用获取表格父级元素的方法获取,没有意识到表单的值是填在value里面的,而表格里面的值直接在th容器里填的 2.在考虑父级元素时没有考虑到它所有的容器都属于他的父级元素                                                                                   

PHP 判断是否为Get/Post/Ajax提交

<?php PHP 判断是否为Get/Post/Ajax提交 /** * 是否是AJAx提交的 * @return bool */ function isAjax(){ if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){ return true; }else{ return false; } } /** *

ajax提交与普通表单提交的优缺点

一般需要提交整个表单,那么我们就需要提交form表单.比如查询,分页这种. 如果只是做局部刷新,那么可以采用异步ajax提交.这样请求的时候只用传需要的参数,然后请求成功后也不用整体刷新页面,只用局部刷新,这样节省了带宽, 比如我们采用ajax删除的时候. 所以当需要整体刷新的时候,那么就可以采用表单提交. 当要局部刷新的时候,我们采用ajax请求. 提交form表单: function query(){ var frm = document.getElementById("frm")

使用ajax提交form表单,包括ajax文件上传

前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){ ... },"json"); 又或者是这样的ajax $.ajax({ url:"${pageContext.request.contextPath}/public/testupload", type:"post", data:{username:username}, success:function(data){ w

Ajax提交进度显示实例

概述:ajax提交比较大的文件的时候,我们希望能够看到它上传的进度,代码放下面了. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>XMLHttpRequest 上传文件进度条示例</title> </head> <body> <progress id="upload_progress" val

使用ajax提交form表单,包括ajax文件上传 转http://www.cnblogs.com/zhuxiaojie/p/4783939.html

使用ajax提交form表单,包括ajax文件上传 前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){ ... },"json"); 又或者是这样的ajax $.ajax({ url:"${pageContext.request.contextPath}/public/testupload", type:"post", data:{username:username},

ajax提交session超时跳转页面使用全局的方法来处理

来自:http://www.jb51.net/article/43770.htm 如果是ajax提交,超时时从服务器发出的跳转命令就不会起作用,所以如果是session超时,而且是在ajax请求,就在响应头里,再用一个全局的方法来处理session超时要跳转的页面. 在过滤器中写入如下方法:(未测试) public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws I

spring mvc接收ajax提交的JSON数据,并反序列化为对象

需求:spring mvc接收ajax提交的JSON数据,并反序列化为对象,代码如下: 前台JS代码: //属性要与带转化的对象属性对应 var param={name:'语文',price:16}; $.ajax({ url: "/book/adddata", type: "POST", dataType: 'json', //必需设定,后台@RequestBody会根据它做数据反序列化 contentType:"application/json&quo

jquery的ajax提交时loading提示的处理方法

方法1:使用ajaxStart方法定义一个全局的“加载中...”提示 $(function(){     $("#loading").ajaxStart(function(){         $(this).html("<img src='/jqueryStu/images/loading.gif' />");       });       $("#loading").ajaxSuccess(function(){