原始XMLHttpRequest方法详情回顾


Posted in Javascript onNovember 28, 2013

用一个典型的登录验证的例子来演示吧

一般来说,使用XMLHttpRequest对象来进行登陆验证要经过以下这几个步骤

1.使用DOM方式获得输入框中的值         

var userName = document.getElementById("userName").value;

2.创建XMLHttpRequest对象,这一步比较复杂,主要原因是要考虑浏览器的兼容性问题。      
if (window.XMLHttpRequest) {
        //针对FireFox,Mozillar,Opera,Safari,IE7,IE8
        xmlhttp = new XMLHttpRequest();
        //针对某些特定版本的mozillar浏览器的BUG进行修正
        if (xmlhttp.overrideMimeType) {
            xmlhttp.overrideMimeType("text/xml");
        }
    } else if (window.ActiveXObject) {
         //针对IE6,IE5.5,IE5
        //两个可以用于创建XMLHTTPRequest对象的控件名称,保存在一个js的数组中
        //排在前面的版本较新
        var activexName = ["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
        for (var i = 0; i < activexName.length; i++) {
            try{
                //取出一个控件名进行创建,如果创建成功就终止循环
                //如果创建失败,回抛出异常,然后可以继续循环,继续尝试创建
                xmlhttp = new ActiveXObject(activexName[i]);
                break;
            } catch(e){
            }
        }
    }

3.注册XMLHttpRequest对象的回调函数,注册回调函数时,之需要函数名,不要加括号。    
//注册回调函数时,之需要函数名,不要加括号
    //我们需要将函数名注册,如果加上括号,就会把函数的返回值注册上,这是错误的
    xmlhttp.onreadystatechange = callback;

4.设置( GET )连接信息     
//第一个参数表示http的请求方式,支持所有http的请求方式,主要使用get和post
//第二个参数表示请求的url地址,get方式请求的参数也在url中
//第三个参数表示采用异步还是同步方式交互,true表示异步
xmlhttp.open("GET","AJAXServer?name="+ userName,true);

5.发送请求 
xmlhttp.send(null);

6.(POST)方式,需要自己设置http的请求头,并且由于要进行编码,所以不能直接在XHR.open的第二个参数中将数据发过去,而应该用send()方法将数据传送过去
//POST方式请求的代码
//xmlhttp.open("POST","AJAXServer",true);
//POST方式需要自己设置http的请求头
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//POST方式发送数据
xmlhttp.send("name=" + userName);

回调函数:
//回调函数
function callback() {
    //alert(xmlhttp.readyState);
    //5。接收响应数据
    //判断对象的状态是交互完成
    if (xmlhttp.readyState == 4) {
        //判断http的交互是否成功
        if (xmlhttp.status == 200) {
            //获取服务漆器端返回的数据
            //获取服务器段输出的纯文本数据
            var responseText = xmlhttp.responseText;
            //将数据显示在页面上
            //通过dom的方式找到div标签所对应的元素节点
            var divNode = document.getElementById("result");
            //设置元素节点中的html内容
            divNode.innerHTML = responseText;
        } else {
            alert("出错了!!!");
        }
    }
}
Javascript 相关文章推荐
javascript 多级checkbox选择效果
Aug 20 Javascript
JavaScript内核之基本概念
Oct 21 Javascript
jQuery load方法用法集锦
Dec 06 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
Jun 15 Javascript
JavaScript中创建对象的模式汇总
Apr 19 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
Aug 11 Javascript
BootStrap Tooltip插件源码解析
Dec 27 Javascript
JS实现中国公民身份证号码有效性验证
Feb 20 Javascript
vuejs选中当前样式active的实例
Aug 22 Javascript
jsonp跨域及实现百度首页联想功能的方法
Aug 30 Javascript
微信分享invalid signature签名错误踩过的坑
Apr 11 Javascript
全面解析Vue中的$nextTick
Dec 24 Vue.js
jQuery处理xml格式的返回数据(实例解析)
Nov 28 #Javascript
使用js写的一个简易的投票
Nov 27 #Javascript
juery框架写的弹窗效果适合新手
Nov 27 #Javascript
js使用数组判断提交数据是否存在相同数据
Nov 27 #Javascript
js每隔5分钟执行一次ajax请求的实现方法
Nov 27 #Javascript
js字符串截取函数substr substring slice使用对比
Nov 27 #Javascript
JS如何判断移动端访问设备并解析对应CSS
Nov 27 #Javascript
You might like
php懒人函数 自动添加数据
2011/06/28 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
php实现的验证码文件类实例
2015/06/18 PHP
为你总结一些php信息函数
2015/10/21 PHP
php数字每三位加逗号的功能函数
2015/10/22 PHP
Yii rules常用规则示例
2016/03/15 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
jquery事件机制扩展插件 jquery鼠标右键事件
2011/12/21 Javascript
jQuery常见开发技巧详细整理
2013/01/02 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
JavaScript实战之菜单特效
2016/08/16 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
2018/08/22 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
python dict remove数组删除(del,pop)
2013/03/24 Python
python获得一个月有多少天的方法
2015/06/04 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
自定义django admin model表单提交的例子
2019/08/23 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
初中生三年学习生活的自我评价
2013/11/03 职场文书
新闻编辑自荐信
2013/11/03 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
升国旗演讲稿
2014/09/05 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python
Python使用openpyxl批量处理数据
2021/06/23 Python
sql server 累计求和实现代码
2022/02/28 SQL Server