AJAX基础学习

本文详细介绍了AJAX的概念、XMLHttpRequest对象的使用方法、请求类型的选择、服务器响应的处理以及关键事件处理,旨在帮助开发者高效地创建动态网页。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是AJAX?

    AJAX (Asynchronous JavaScript and XML):异步的JavaScript和XML

    AJAX 不是一种新的编程语言,而是使用现有标准的新方法。

    AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。

    AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量的数据交换,AJAX可以是网页实现异步更新。

        这意味着可以在不重新加载整个网页的情况下,对网页的某一部分进行更新。传统的网页如果需要更新内容,必须重载整个网页。

 

XMLHttpRequest对象:

    XMLHttpRequest对象是AJAX的基础。

    所有现代浏览器均支持XMLHttpRequest对象。

    XMLHttpRequest对象用于在后台与服务器进行数据交换。

 

    创建XMLHttpRequest对象:

        语法: var xhr = new XMLHttpRequest();

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

        语法: var xhr = new ActiveXObject("Microsoft.XMLHTTP");

 

    为了应对所有的现代浏览器,包括IE5和IE6,请检查浏览器是否支持XMLHttpRequest对象,支持则创建XMLHttpRequest对象,

        不支持则创建ActiveXObject对象

 

    例如:

        var xhr ;

        if(window.XMLHttpRequest){

            xhr = new XMLHttpRequest();

        }else{

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

        }

 

    XMLHttpRequest对象用于和服务器进行数据交换:

        向服务器发送请求:

            如果需要将请求发送到服务器,我们使用XMLHttpRequest对象的open()和send()方法:

            open()语法:规定请求的类型,url以及是否异步处理请求

            open(method,url,async):

                method: 请求的类型.例如:get 或 post

                url: 文件在服务器上的位置

                async: true(异步) 或 false(同步)

            send()语法:将请求发送到服务器

            send(string):

                string: 仅用于post请求。

 

            请求时是使用get还是post?

                与post相比,get更简单快速,并且大部分情况下都能用.

                然而,在一下情况下请使用post请求:

                    1:无法使用缓存文件(更新服务器上的文件或数据库)

                    2:向服务器发送大量数据(post没有数据限制)

                    3:发送包含未知字符的用户输入时,post比get更稳定也更可靠。

 

                get请求:

                    一个简单的get请求:

                    xhr.open('get','demo_get.asp',true);

                    xhr.send();

 

                    上面的例子,可能得到的是缓存的结果(当缓存中已经存在请求路径的结果是时)

                    为了得到的是最新的数据而不是缓存数据,可以向url添加一个唯一的ID:

                    xhr.open('get','demo_get.asp?t=' + Math.random(),true);

                    xhr.send();

 

                    如果想通过get方式发送信息,可以向url添加信息:

                   xhr.open('get','demo_get.asp?name=Bill&age=22',true);

                   xhr.send();

 

                post请求:

                    一个简单的post请求:

                    xhr.open('post','demo_post.asp',true);

                    xhr.send();

 

                    如果需要像HTML表单那样post数据,请使用setRequestHeader()来添加HTTP请求头信息。

                    然后在send()方法中规定你希望发送的数据:

                    xhr.open('post','ajax_test.asp',true);

                    xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');

                    xhr.send('name=Bill&age=22');

 

                    setRequestHeader()语法:向请求添加HTTP头

                        setRequestHeader(header,value);

                            header: 规定头的名称

                            value: 规定头的值

 

                url: 服务器上的文件:

                    open()方法的url参数是指服务器上的文件的地址,该文件可以是任何类型的文件。

 

                异步: true 或 false

                    XMLHttpRequest对象如果需要用于异步的话,其open()方法的async参数必须设置为true.

                    对于web开发人员来说,发送异步请求是一个巨大的进步。很多在服务器执行的任务都相当费时,

                    AJAX出现之前,这可能会引起应用程序挂起或停止。

                    通过AJAX,JavaScript无需等待服务器的响应,而是:

                        在等待服务器响应时执行其他脚本

                        当响应就绪后对响应进行处理

 

                    async = true:

                        当使用async=true时,请规定在响应处于onreadystatechange事件中的就绪状态时执行的函数:

                        例如:

                        xhr.onreadystatechange = function(){

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

                                //当响应处于就绪状态时要执行的任务代码

                                document.getElementById('myDiv').innerHTML = xhr.responseText;

                            }

                        };

                        xhr.open('get','test.txt',true);

                        xhr.send();

 

                    async = false:

                        如果使用async=false,JavaScript会等到服务器响应就绪才继续执行。

                        如果服务器繁忙或缓慢,应用程序会挂起或停止。

                        当你使用async=false时,请不要编写onreadystatechange函数,

                        把响应就绪要执行的代码放到send()语句后面即可:

                        例如:

                        xhr.open('get','test.txt',false);

                        xhr.send();

                        document.getElementById('myDiv').innerHTML = xhr.responseText;

 

服务器响应:

    如果需要获得来自服务器的响应,请使用XMLHttpRequest对象的 responseText 或 responseXML 属性。

        responseText: 获得字符串形式的响应数据

        responseXML: 获得XML形式的响应数据

 

    responseText 属性:

        如果来自服务器的响应数据不是XML,请使用responseText属性。

        例如:

        document.getElementById('myDiv').innerHTML = xhr.responseText;

 

    responseXML 属性:

        如果来自服务器的响应数据是XML,而且需要作为XML对象进行解析,请使用responseXML属性。

        例如:请求books.xml文件,并解析响应

            xmlDoc = xhr.responseXML;

            txt = "";

            x = xmlDoc.getElementsByTagName('artist');

            for(var i = 0; i < x.length; i++){

                txt = txt + x[i].childNodes[0].nodeValue + '<br/>';

            }

            document.getElementById('myDiv').innerHTML = txt;

 

onreadystatechange事件:

    当请求被发送到服务器时,我们需要执行一些基于响应的任务。

    每当readyState改变时,就会触发onreadystatechange事件。

    readyState属性存有XMLHttpRequest的状态信息。

 

    下面是XMLHttpRequest对象的三个重要属性:

        onreadystatechange: 存储函数(或函数名),每当readyState属性改变时,就会调用该函数。

        readyState: 存有XMLHttpRequest对象的状态。从0到4发生变化.

            0:请求未初始化

            1:服务器连接已建立

            2:请求已接收

            3:请求处理中

            4:请求已完成,并且响应已就绪

        status: 存有页面状态码

            200:“OK”

            404:未找到页面

 

    在onreadystatechange事件中,我们规定当服务器响应已经做好被处理的准备时所执行的任务。

        当readyState等于4且页面状态码为200时,表示响应已经就绪并且成功:

            xhr.onreadystatechange = function(){

                if(xhr.readyState == 4 && xhr.staus == 200){

                    document.getElementById('myDib').innerHTML = xhr.responseText;

                }

            };

 

        onreadystatechange事件被触发5次(0-4),对应着readyState的每个变化。

 

参考资料:http://www.w3school.com.cn/ajax/index.asp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值