ajax原理实战

创建一个learnDemo

首先 先开启一个小型服务器

node.js环境下执行:

http-server

创建:ajax.html.   

<!DOCTYPE html>
<html>
<head>
	<title>ajax</title>
	<script type="text/javascript">
		window.onload = function (){
			var bBtn = document.getElementById("btn");
		}
	</script>
</head>
<body>
   <button type="button" value="Hello-Button" id="btn">Hello-Button</button>

</body>
</html>

准备一个静态文件 hello.txt里面输入一些内容保存。

可以通过地址 http://localhost:8080/hello.txt 直接访问hello.txt文件的内容

如图:

现在不用浏览器获取内容,用ajax获取hello.txt文件里的内容

通过点击按钮的时候获取:

oBtn.onclick = function () {
    var xhr = new XMLHttpRequest(); // 打开浏览器
    xhr.open('get','hello.txt',true); //在地址栏输入地址
    xhr.send();// 提交
    
    xhr.onreadystatechange = function () {// 等待服务器返回内容
        if(xhr.readyState == 4){
            console.log(xhr.responseText);
        }
    }
}

点击按钮,发现控制台打印出hello.txt的内容

想通过ajax完成一个数据交互工作,首先要先创建一个ajax对象,对象名称就是:XMLHttpRequest. 

 

创建 XMLHttpRequest 对象

所有现代浏览器(IE7+、Firefox、Chrome、Safari 以及 Opera)均内建 XMLHttpRequest 对象。

创建 XMLHttpRequest 对象的语法:

variable=new XMLHttpRequest();

老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象:

variable=new ActiveXObject("Microsoft.XMLHTTP");

为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象。如果支持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject ,ActiveXObject只是一个插件

var xmlhttp;
if (window.XMLHttpRequest)。//不要漏掉window
{
    //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
    xmlhttp=new XMLHttpRequest();
}
else
{
    // IE6, IE5 浏览器执行代码
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

下面说说try catch  话不多说看代码:

try{
   // 代码尝试执行这块中的内容,如果有错误,则会执行catch,并且会传入错误信息参数
}catch(e){}

如果不用try catch 调用不存在的变量,会报错,而且影响后续代码的执行

创建对象也可以用下面方式

 

try{
  xhr = new XMLHttpRequest();
} catch (e) {
  xhr = new ActiveXObject('Microsoft.XMLHTTP');
}

open方法

参数:

    1,打开方式

    2,地址

    3,是否异步

           异步:非阻塞模式,前面的代码不会影响后面代码的执行。true异步

           同步:阻塞模式  前面的代码会影响后面代码的执行。false 同步

首先了解一下表单:数据的提交

    action : 数据提交的地址,默认是当前页面

    method:数据提交的方式,默认是get 方式

            1. get // 把数据名称和数据值用=连接,如果有多个的话,那么它会把多个数据组合用&进行连接,然后把数据放到url?后面传到指定页面

               url长度限制,不要通过get方式传递过多的数据

            2,post   

                理论上没有限制,

    enctype :数据的格式,默认:application/x-www.form-urlencoded

后续的代码需要用到前面的内容时,用false,(很少用同步)

返回的内容

readyState :Ajax 工作状态          

responseText:ajax请求返回的内容被存放到这个属性下面

onreadystatechange:当ready state改变的时候触发

 

status:服务器状态http 状态码。

send(要发送的数据post和get区别):发送请求

        • 中文编码get乱码   (encodeURI)post 中文没问题 
        • 缓存get (后面连接一个随机数,时间戳)  post 没有缓存文字
        • POST:setRequestHeader(类型, 内容):设置请求头(表单有默认值application/x-www-form-urlencoded)post 必须设置请求头
          // post 方式,数据放在send()里面作为参数传递  
        • "Content-Type","application/x-www-form-urlencoded”

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章