博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如果不用jQuery,Ajax你还能写出多少?
阅读量:5942 次
发布时间:2019-06-19

本文共 1867 字,大约阅读时间需要 6 分钟。

hot3.png

    许久之前发过一篇关于Ajax的博客,通篇讲的都是通过jQuery编写Ajax,可能因为jQuery在这方面做的实在太好,以至于突然发现不用jQuery的话自己都模糊了Ajax的写法,这里重温一下.

    First - 我们明确在使用jQuery的Ajax忽略掉的问题,那就是Ajax的操作本身是操作一个XMLHttpRequest对象,所有的请求发送和监听都是围绕它进行的.

    在不同浏览器中,以及IE的不同浏览器版本下都会有不一样的Function创建这个对象,或者方法不同或者参数不同.

function CreateXHR() {            var xhrobj = false;            try {                xhrobj = new ActiveXObject("Msxml2.XMLHTTP"); //ie msxml3.0+            }            catch (e) {                try {                    xhrobj = new ActiveXObject("Microsoft.XMLHTTP"); //ie msxml 2.6                } catch (e2) {                    xhrobj = false;                }            }            if (!xhrobj && typeof XMLHttpRequest != 'undefined') { //firefox opera 8.0 safari                xhrobj = new XMLHttpRequest();            }            return xhrobj;        }
    为了最终创建出正确的XHR对象,不断用try-catch进行尝试.

    Second - 有了XHR对象,接下来我们调用XMLHttpRequest对象的各个方法就可以了,Ajax对于所谓的异步请求发送无外乎就是通过几个方法来进行的.

    我们这里是通过Javascript原生编写异步请求,但是其实并不复杂,只需要记住几个function就可以了.

//open,setRequestHeader,onreadystatechange,sendvar xhr = CreateXHR();//这里以POST方式发送,也可以是GET,参数不同即可.而且GET不需要设置setRequestHeaderxhr.open("POST", "demo.jsp", true);//设置HTTP的输出内容类型为:application/x-www-form-urlencodedxhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");//设置浏览器不使用缓存,服务器不从缓存中找,重新执行代码,而且服务器返回给浏览器的时候,告诉浏览器也不要保存缓存。xhr.setRequestHeader("If-Modified-Since", "0"); //设置回调函数xhr.onreadystatechange = callback;  //callback是方法名 //发送请求xhr.send(null); //GET方式xhr.send("isAjax=1&na=123"); //POST方式
    这里就完成了请求发送,也定义了请求的回调是callback函数,所以最后我们的请求的结果就是在callback函数中.

    Third - 定义callback函数,Ajax的返回是有状态的,这里不同于jQuery的success,所以要自己判断状态码是否正确.

//回调函数function callback() {  if (xhr.readyState == 4) {    if (xhr.status == 200) {      var res = xhr.reponseText; //获得服务器返回的字符串      console.log(res);    }  }}
    这样就完成了通过原生Javascript发送Ajax请求.

转载于:https://my.oschina.net/blogshi/blog/209175

你可能感兴趣的文章
计算机网络术语总结4
查看>>
新手小白 python之路 Day3 (string 常用方法)
查看>>
soapUI的简单使用(webservice接口功能测试)
查看>>
框架 Hibernate
查看>>
python-while循环
查看>>
手机端上传图片及java后台接收和ajaxForm提交
查看>>
【MSDN 目录】C#编程指南、C#教程、ASP.NET参考、ASP.NET 4、.NET Framework类库
查看>>
jquery 怎么触发select的change事件
查看>>
angularjs指令(二)
查看>>
(原創) 如何建立一个thread? (OS) (Linux) (C/C++) (C)
查看>>
<气场>读书笔记
查看>>
领域驱动设计,构建简单的新闻系统,20分钟够吗?
查看>>
web安全问题分析与防御总结
查看>>
React 组件通信之 React context
查看>>
ZooKeeper 可视化监控 zkui
查看>>
Linux下通过配置Crontab实现进程守护
查看>>
ios 打包上传Appstore 时报的错误 90101 90149
查看>>
Oracle推出轻量级Java微服务框架Helidon
查看>>
密码概述
查看>>
autoconf,automake,libtool
查看>>