ajax请求

ajax
    ascychronous javascript and xml(异步的js与xml)
    是一种锦上添花的技术,实质上是利用浏览器内置的对象(ajax对象,类型是XMLHttpRequest)向
    服务器发送异步(ajax对象在向服务器发送请求时,不会打断用户的其他操作)的请求,ajax对象
    根据服务器返回的数据局部更新页面,整个过程当中,页面无刷新
如何获得ajax对象?BOM对象 DOM对象
    区分浏览器
        var xhr=null;
        if(window.XMLHttpRequest){
            //非低版本的IE
            xhr=new XMLHttpRequest();
        }else{
            xhr=new ActiveXObject("Microsoft.XMLHttp");
        }
    相关属性:
        onreadystatechange:给ajax对象绑定一个事件函数
        readyState:ajax对象与服务器的通讯状态
            0:(未初始化)对象已经创建,open方法还未调用
            1:(已经初始化)open方法已经调用
            2:(发请求)send方法已被3调用
            3:发送数据,ajax对象已经接受了服务器返回的部分数据
            4:ajax接受了服务器返回的全部数据
        responseText:服务器返回的数据类型是文本
        responseXML:服务器返回的数据类型是xml
        status:服务器返回的状态码(200 404 500 302...)
    通过ajax对象向服务器发送请求
        step1、先获取ajax对象
        step2、初始化
                xhr.open("get/post","url",true/false);
                参数1:请求类型get/post
                参数2:请求地址"check?username=zs"
                    注:
                        如果是get请求,请求参数跟在请求地址后
                        如果是post请求,请求参数通过send方法传递
                参数3:请求方式
                        true:异步请求
                            服务器响应回来之前用户可以继续其他操作
                        false:同步请求
                            如果服务器响应的时间较长,浏览器的页面会出现锁死的状态
                注意:如果是post请求,添加以下设置
                    //设置响应消息头
                    xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
                    否则服务器接受到的参数值是null
                    
        step3、绑定事件函数
            xhr.onreadystatechange=function(){}
        step4、发请求,调用send方法
            xhr.send(null);//get请求
            xhr.send("username=zs");//post请求
如果ajax对象发请求时,采用的是get请求方式,那么IE浏览器会有以下两个问题:
		a、缓存问题
			如果是get请求,IE浏览器会将数据保存下来,当再次发送请求时,
			如果请求地址未发生改变,则浏览器会将缓存中的数据返回,
			并不会真正的向服务器发送新的请求
			
			解决方案:
				--把请求方式改成post
				--在请求地址后追加参数,比如new Date().getTime()
		b、中文乱码
			如果是get请求,IE浏览器在处理参数时,使用的是gbk编码格式,
			而chrom/firefox采用的是utf-8
			
			encodeURI(uri)===>将uri中的数据采用utf-8的格式处理


	向服务器发请求
		浏览器--->服务器
		ajax--->服务器
	区别:
		浏览器会销毁当前页面,用户在原页面上输入的数据不复存在
		服务器响应回来的是一个新的页面,如果希望局部更新数据,
		减少浏览器与服务器的数据交互量,可以使用ajax对象发请求

  

posted @ 2018-02-12 16:47  根须  阅读(152)  评论(0编辑  收藏  举报