AJAX动态更新网页

一、简介:

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML), 是一种可以使网页实现异步更新的技术 , 简言之就是在不重新加载网页的情况下 , 更新网页的部分数据。

二、工作原理

<html>
         <head>
             <meta charset="UTF-8">
             <title></title>
        </head>
    <body>
    </body>
    <script type="text/javascript">
    //ajax原理
    /*
     * 1. new XMLHttpRequest    创建一个超文本传输请求 , XMLHttpRequest(XHR)对象用于在后台与服务器交换数据。
     * 2.ajax.open
     * 3.ajax.send
     * 4.ajax.onreadystatechange
     */
    function ajaxFun () {
        //打电话例子
        //1.有个手机(判断手机是"移动",还是"联通",也就是说浏览器内核不同其数据请求方式不同)
        if(window.XMLHttpRequest) { //现代浏览器
            var ajax = new XMLHttpRequest;
        } else { //IE浏览器
            var ajax = new ActiveXObject("Microsoft.XMLHTTP");   //IE5和IE6使用ActiveXObject
        }
        //2.拨号  防止缓存添加时间戳
        var time = new Date().getTime();
        //"test.txt?v=3.0" 表示版本号  
        //"test.txt?t=4" 时间戳

//注:在这里创建了一个txt文件,先模拟请求文件内容,如果是GET请求那么open()函数里面的参数填写GET,反之填写POST

/*那么问题来了,什么时候用GET什么时候用POST呢?

GET与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。

然而,在以下情况中,请使用 POST 请求:

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

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

3.发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

*/
        ajax.open("GET", "test.txt?t=" + time, true);

/*.open()函数中可以填写三个参数,第一个是请求数据的类型,第二个是请求数据的地址(文件所在服务器下的位置)以及异步处理请求

当然,如果请求数据类型为GET,那么可以采取URL拼接的方式传输数据

如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据:

xmlhttp.open("POST","ajax_test.asp",true);

xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

xmlhttp.send("fname=Bill&lname=Gates");

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

注:当您使用 async=false 时,请不要编写 onreadystatechange 函数 (不要问为什么,我也不知道)

那么问题来了,什么是异步,什么是同步?两者有什么区别

同步也就是说在JS代码自上而下加载的时候,当碰到AJAX时会先执行AJAX,当把AJAX执行完毕后才执行之后的代码,也就说只要AJAX不执行完毕,那么AJAX后面的JS代码始终不起作用;如果同步能理解那么异步就好理解了,异步就是当JS代码执行到AJAX时,不会因为AJAX的存在而停止加载,它会继续加载JS代码。

那么在这里有些博友会发出疑问,异步处理和多线程又有什么关系呢?

异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。实现异步可以采用多线程技术或则交给另外的进程来处理。

*/
        //3.发送

//第三步相当于向数据库发送数据
        ajax.send(null);

//注:.send()函数中填写String类型的参数只用于POST请求
        //4.检查状态

//第四步也就是检查发送数据是否成功,成功之后把数据库中更新后的数据再传输到页面中.也就是更新了网页内容
        ajax.onreadystatechange = function() {
            //检查发送的状态
            //alert(ajax.readyState);
            //状态为4的话表示发送成功
            /*
     * 值    含义
        0    表示对象已建立,但还示初始化,尚未调用open方法
        1    表示open方法已调用,尚未调用send方法
        2    表示send方法已调用,其它数据未知
        3    表示请求已发送,正在接收数据
        4    表示数据已接收成功

检查ajax数据请求返回值会出现五个,在这里小编简而称之为"五值四状态",便于各位博友理解。

当然,数据发送成功后还有一个返回值,也就是在前端向后台发送数据,当数据接收成功后,后台也会对前端做出回应,如果数据更新不成功可以从返回的状态码也可以判断出是前端出现问题还是后台出现了问题。

由于服务器返回的状态码过多,在这里小编借用博友 Kevin Lin 的总结方便各位博友的理解:

100-199 用于指定客户端应相应的某些动作。
        200-299 用于表示请求成功。
        300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。
        400-499 用于指出客户端的错误。
        500-599 用于支持服务器错误。
     */
            if(ajax.readyState == 4) {
//                alert("发送成功");
                //检测返回的状态,状态码
//                alert(ajax.status);
                if (ajax.status  > 199 && ajax.status < 207 || ajax.status == 304) {
                    //通话成功
                    alert(ajax.responseText) ;
                }
            }
        }    
    }
    document.onclick = function () {
        ajaxFun();
    }
    </script>

</html>

三、关于AJAX的扩展:

服务器响应:

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

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

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

responseText 属性

如果来自服务器的响应并非 XML,请使用 responseText 属性。

responseText 属性返回字符串形式的响应。

responseXML属性

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

时间: 2024-10-03 07:11:18

AJAX动态更新网页的相关文章

ajax动态更新下拉列表

前面做了一个ajax的小demo,今天看一个动态更新下拉列表,或者也叫级联更新下拉列表,这个也是利用ajax的异步调用去后台实现数据请求,然后回到前台完成下拉列表数据的更新,以增强web应用的交互性. 后台servlet package com.ajax; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annot

Ajax异步更新网页(使用jQuery)

一.页面代码 <!DOCTYPE html> <html> <head> <title>MyHtml.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"&g

爬取Ajax动态加载网页

常见的反爬机制及处理方式 1.Headers反爬虫 :Cookie.Referer.User-Agent 解决方案: 通过F12获取headers,传给requests.get()方法 2.IP限制 :网站根据IP地址访问频率进行反爬,短时间内进制IP访问 解决方案: 1.构造自己IP代理池,每次访问随机选择代理,经常更新代理池 2.购买开放代理或私密代理IP 3.降低爬取的速度 3.User-Agent限制 :类似于IP限制 解决方案: 构造自己的User-Agent池,每次访问随机选择 5.

Python网络爬虫_爬取Ajax动态加载和翻页时url不变的网页

1 . 什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面. 几个常见的用到ajax的场景. 比如你在逛知乎,你没有刷新过网页,但是你却能看到你关注的用户或者话题有了新动态的消息提示. 还比如,我们在看视频时,可以看到下面

HtmlUnit爬取Ajax动态生成的页面内容

HtmlUnit说白了就是一个浏览器,这个浏览器是用Java写的无界面的浏览器,正因为其没有界面,因此执行的速度还是可以滴. HtmlUnit提供了一系列的API,这些API可以干的功能比较多,如表单的填充,表单的提交,模仿点击链接,由于内置了Rhinojs引擎,因此可以执行JavaScript 之前用的时候一直抓取不了Ajax动态生成table及其数据,用Firefox和IE浏览器查看网页源代码也看不到table和数据,但是用Firefox查看元素能看到信息 调研了HtmlUnit好久都没有用

定时动态更新图表

在进行实现动态更新图表时主要使用AJAX技术,主要分两种实现方法,一种是通过ASP.NET特有的AJAX控件,UpdatePanel.Timer控件+ASP.NET自带的Chart控件实现:另一种为使用第三方的图表库+JQUERY\AJAX实现. ASP.NET控件实现 实现: 前台将要定时刷新的内容放到updatePanel中即可,前台代码如下: <form id="form1" runat="server"> <asp:ScriptManage

手游的一些事儿 - 动态更新

标题本来想叫"手游那些事儿",想了想还是算了,不想盗用"明朝那些事儿" 的"招牌"(其实还是有盗用的嫌疑,哈哈).   为了抹掉打广告的嫌疑,这里暂以已经比较火的或者腾讯出品的游戏举例(外加吐槽) 腾讯的<游龙英雄> 游久的<酷酷爱魔兽> 腾讯的<怪物弹珠>   目前国内手游2d开发以cocos2d-x js/lua为主流,3d多使用unity3d,类似网易这种做过端游的游戏厂商则倾向于使用在端游已经成熟的引擎

第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

第三百三十四节,web爬虫讲解2-Scrapy框架爬虫-Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻标题和rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息,那么这种一般都是 js 的 Ajax 动态请求生成的信息 我们以百度新闻为列: 1.分析网站 首先我们浏览器打开百度新闻,在网页中间部分找一条新闻信息 然后查看源码,看看在源码里是否有

highChart数据动态更新

highChart官网上通过ajax加载数据的例子 上面是第一次生成图表的时候使用 我想动态更新,在已经生成的图表上动态更新 chartBS.series[0].setData(sugarListDataBefore); chartBS.series[0].name=beforeTimeName; chartBS.series[1].setData(sugarListDataAfter); chartBS.series[1].name=afterTimeName; chartBS.redraw(