AJAX的学习使用

栏目: jQuery · 发布时间: 5年前

内容简介:open方法有三个参数,分别是如果为POST提交的话,那么需要设置请求头部,在把参数设置在sen();中提交请求后,我们可以通过onreadystatechage去监测响应,看下是否成功,readyState一共有五个状态,到达4的时候说明相应内容已经解完成了,也可以通过XMLHttpRequest.onload来代替,当等于4时,通过status获取状态码。
  • 优点 1.页面不刷新的情况下修改数据 2.异步通信,响应快 3.建奇功服务器负担
  • 缺点 1.浏览器back失效,对浏览器返回功能造成破坏 2.有安全隐患 3.对搜索引擎支持差 4.无法用URL直接访问

常用场景

  • 登录注册数据验证(用户不存在或者已经存在)
  • 下拉搜索数据提示
  • ......

利用原生JS来写一个AJAX方法

1.首先,先创建一个变量用来储存XMLHttpRequest对象

var http = null;
复制代码

2.创建XMLHttpRequest对象

http = new XMLHttpRequest();
复制代码

3.利用open(...)方法进行配置

open方法有三个参数,分别是

  • method (请求方式)
  • url (请求地址)
  • async (是否异步) 第一个参数设置其请求方式,如常见的GET和POST,第二个参数设置URL,可以是后台文件路径也可以是网络地址。第三个是问你是否需要异步请求,这里一般建议true,毕竟ajax其作用就是异步获取数据。
http.open('GET' , '/api/test.php?name=wang' , true);
复制代码

如果为POST提交的话,那么需要设置请求头部,在把参数设置在sen();中

http.open('POST','/api/test.php',true)
http.setRequestHeder(xxxxx格式);
http.send('name=wang');
复制代码

4.通过XMLHttpRequest,send()提交

http.send();
复制代码

5.对服务器响应做处理

提交请求后,我们可以通过onreadystatechage去监测响应,看下是否成功,readyState一共有五个状态,到达4的时候说明相应内容已经解完成了,也可以通过XMLHttpRequest.onload来代替,当等于4时,通过status获取状态码。

http.onload = function (){
  if(http.status === 200){
    console.log('ajax yes!');
  }else{
    console.log('ajax no!')
  }
}
复制代码

状态码详解

状态码 信息
200 表示响应结果请求被正常处理了
204 表示请求资源成功,但是没有资源可以返回
206 表示请求资源的某一部分,响应中包含content-range
301 表示资源的访问路径(URL)被变更
302 表示请求的资源已经在其他位置了,但是默认你已经知道了
303 表示请求的资源已经在其他位置了,应使用 GET 方法定向获取请求的资源。
304 表示资源已经请求到到了,但是未能按照正常的方式请求
307 临时重定向。
400 请求报文中存在语法错误,需要修改请求内容重新请求
401 需要通过http认证,若之前已进行过 1 次请求,则表示用 户认证失败
403 服务器拒绝你的的访问
404 服务器上没有请求的资源,可能是地址写错了.......
405 客户端的请求方法被服务器禁止
500 服务器资源发生了错误
503 服务器无法请求
总结 2xx为请求成功,3xx为URL被改变了,4xx客户端错误,5xx服务器错误

封装ajax方法

/**
    /**
     * ajax封装,参数传递一个对象
     * url : 请求地址
     * type : 请求方式
     * dataType : 请求值返回值
     * data : 参数对象
     * async : 异步
     * success : function 成功函数 => 参数是响应内容
     * error : function 异常函数 => 参数内容是响应码
     **/
    var ajax = function (obj) {
        //默认传入一个对象,如果没有,就为空对象
        obj = obj || {};
        //默认GET请求
        obj.type = (obj.type || 'GET').toUpperCase();
        //默认返回JSON数据
        obj.dataType = obj.dataType || 'JSON';
        //默认异步请求
        obj.async = obj.async || true;
        //参数处理,执行getParams方法
        var data = getParams(obj.data);
        var http;
        /**
         * 创建AJAX的实例适配
         * W3C使用XMLHttpRequest
         * IE使用ActiveXObject('Microsoft.XMLHTTP');
         * */
        if (window.XMLHttpRequest){
            //w3c
            http = new XMLHttpRequest();
        }else {
            //IE
            http = new ActiveXObject('Microsoft.XMLHTTP');
        }
        /**
         * 请求方式的封装
         * GET和POST请求
         * */
        if (obj.type === 'GET'){
            http.open("GET",obj.url+'?'+data,obj.async);
            http.send();
        }else if (obj.type === 'POST'){
            http.open('POST',obj.url,obj.async);
            //设置头部参数
            http.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            //提交post数据
            http.send(data);

        }
        /**
         * 监听响应接口
         * 如果步骤4的请求状态码为正确的就执行success函数
         * 如果错误的话就执行error函数
         * */
        http.onreadystatechange = function () {
            if (http.readyState === 4){
                //如果响应内容完成了,判断状态码
                var status = http.status;
                if (status >= 200 && status < 300){
                    //回调
                    obj.success && obj.success(http.responseText,http.responseXML);
                } else {
                    obj.error && obj.error(status);
                }
            }
        };
    };
    /**
     * 对象参数的处理
     * 转换成为需要的字符串
     */
    function getParams(data) {
        var arr = [];
        for (var param in data){
            arr.push(encodeURIComponent(param) + '=' +encodeURIComponent(data[param]));
        }
        console.log(arr);
        arr.push(('randomNumber=' + Math.random()).replace('.'));
        return arr.join('&');
    }
复制代码

jQuery的AJAX封装方法

jQuery封装的ajax的使用 GET

$.ajax({
	type:'get',
	url: "url",
	data:{'foo':'bar'},
	success: function(res) {
	    load_content(res);
	}
});	
复制代码

POST

$.ajax({
    url: "url",
    success: function(res) {
    //设置到页面上
    console.log(typeof res);
    }
});
复制代码

jquery的ajax原理也相对差不多,它给开发者处理了非常多的兼容性问题,大大优化了开发者在写ajax造成的代码重复。。。。。。。。。。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Imperfect C++中文版

Imperfect C++中文版

威尔逊 / 荣耀、刘未鹏 / 人民邮电出版社 / 2006-1 / 75.0

汇集实用的C++编程解决方案,C++虽然是一门非凡的语言,但并不完美。Matthew Wilson使用C++十年有余,其间发现C++存在一些固有的限制,需要一些颇具技术性的工作进行弥补。本书不仅指出了C++的缺失,更为你编写健壮、灵活、高效、可维护的代码提供了实用的技术和工具。Wilson向你展示了如何克服C++的复杂性,穿越C++庞大的范式阵列。夺回对代码的控制权,从而获得更理想的结果。一起来看看 《Imperfect C++中文版》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

SHA 加密
SHA 加密

SHA 加密工具