JS如何实现Ajax的请求函数

JavaScript014

JS如何实现Ajax的请求函数,第1张

<script type="text/javascript">  

    //请求函数  

    function f1(){  

        console.log('start')  

        //1.创建AJAX对象  

        var ajax = new XMLHttpRequest()  

          

        //4.给AJAX设置事件(这里最多感知4[1-4]个状态)  

        ajax.onreadystatechange = function(){  

            //5.获取响应  

            //responseText      以字符串的形式接收服务器返回的信息  

            //console.log(ajax.readyState)  

            if(ajax.readyState == 4 && ajax.status == 200){  

                var msg = ajax.responseText  

                console.log(msg)  

                //alert(msg)  

                var divtag = document.getElementById('result')  

                divtag.innerHTML = msg  

            }  

        }  

          

        //2.创建http请求,并设置请求地址  

        var username = document.getElementsByTagName('input')[0].value  

        var email = document.getElementsByTagName('input')[1].value  

        username = encodeURIComponent(username)    //对输入的特殊符号(&,=等)进行编码  

        email = encodeURIComponent(email)  

        ajax.open('get','response.php?username='+username+'&email='+email)  

          

        //3.发送请求(get--null    post--数据)  

        ajax.send(null)  

    }  

      

</script>

<script language="javascript">

var XMLHttpRequestObject=false

if(window.XMLHttpRequest)

{

XMLHttpRequestObject=new XMLHttpRequest()

}

else if(window.ActiveXObject)

{

XMLHttpRequestObject=new ActiveXObject("Microsoft.XMLHTTP")

}

//以上代码是创建一个XMLHttpRequest对象

//下面是一个使用这个XMLHttpRequest对象的函数,这个函数获取服务器的一个文件内容并显示到网页

function getData(dataSource,divID)

{

if(XMLHttpRequestObject)

{

var obj=document.getElementById(divID)

XMLHttpRequestObject.open("GET",dataSource)

XMLHttpRequestObject.setRequestHeader('Content-Type','application/x-www-form-urlencoded')

XMLHttpRequestObject.onreadystatechange=function ()

{

if(XMLHttpRequestObject.readyState==4 &&XMLHttpRequestObject.status==200)

{

obj.innerHTML=XMLHttpRequestObject.responseText

}

}

XMLHttpRequestObject.send(NULL)

}

}

</script>

以下是<body>代码

<body>

<H1>This is an ajax demo</H1>

<form>

<input type="button" value="Fetch the message" onclick="getData('data.txt','dataDiv')"/>

</form>

<div id="dataDiv">

<p>The fetch message will appear here</p>

</div>

</body>

你需要在当前页面文件夹下建一个data.txt文件、点击那个按钮、然后txt里的东西会显示在dataDiv的内容里面

一提到异步交互大家就会说ajax,仿佛ajax这个技术已经成为了异步交互的代名词.那下面将研究ajax的核心对象!

利用ajax实现异步交互无非4步:

创建ajax核心对象

与服务器建立连接

向服务器发送请求

接收服务器响应的数据

看似神秘的异步交互当明确这4步后,也许在大家脑海里已经有了初步的思路了

首先我们创建ajax的核心对象,由于浏览器的兼容问题我们在创建ajax核心对象的时候不得考虑其兼容问题,因为要想实现异步交互的后面步骤都基于第一步是否成功的创建了ajax核心对象.

function

getXhr(){

//

声明XMLHttpRequest对象

var

xhr

=

null

//

根据浏览器的不同情况进行创建

if(window.XMLHttpRequest){

//

表示除IE外的其他浏览器

xhr

=

new

XMLHttpRequest()

}else{

//

表示IE浏览器

xhr

=

new

ActiveXObject('Microsoft.XMLHttp')

}

return

xhr

}

//

创建核心对象

var

xhr

=

getXhr()

通过上述代码我们已经成功的创建了ajax核心对象,我们保存在变量xhr中,接下来提到的ajax核心对象都将以xhr代替.

第二步就是与服务器建立连接,通过ajax核心对象调用open(method,url,async)方法.

open方法的形参解释:

method表示请求方式(get或post)

url表示请求的php的地址(注意当请求类型为get的时候,请求的数据将以问号跟随url地址后面,下面的send方法中将传入null值)

async是个布尔值,表示是否异步,默认为true.在最新规范中这一项已经不在需要填写,因为官方认为使用ajax就是为了实现异步.

xhr.open("get","01.php?user=xianfeng")//这是get方式请求数据

xhr.open("post","01.php")//这是以post方式请求数据

第三步我们将向服务器发送请求,利用ajax核心对象调用send方法

如果是post方式,请求的数据将以name=value形式放在send方法里发送给服务器,get方式直接传入null值

xhr.send("user=xianfeng")//这是以post方式发送请求数据

xhr.send(null)//这是以get方式

第四步接收服务器响应回来的数据,使用onreadystatechange事件监听服务器的通信状态.通过readyState属性获取服务器端当前通信状态.status获得状态码,利用responseText属性接收服务器响应回来的数据(这里指text类型的字符串格式数据).后面再写XML格式的数据和大名鼎鼎的json格式数据.

xhr.onreadystatechange

=

function(){

 //

保证服务器端响应的数据发送完毕,保证这次请求必须是成功的

 if(xhr.readyState

==

4&&xhr.status

==

200){

//

接收服务器端的数据

var

data

=

xhr.responseText

//

测试

console.log(data)

}

}