Ajax与DOM实现动态加载

首先说下问题背景:想要通过异步请求一个文本文件,然后通过该文件的内容动态创建一个DOM节点添加到网页中。

基于这个需要了解:

  1 DOM如何动态添加节点

  2 Ajax异步请求

  3 Chrome浏览器如何处理本地请求

  DOM如何动态添加节点

  想要动态的添加节点,就需要良好的理解DOM文档。

  常用的几个方法:

  getElementById()  getElementsByTagName() getAttribute() setAttribute()

  以及

  createElement() createTextNode() appendChild()

  等等。

  下面看一下创建一个DOM节点的方法过程,首先需要有一个挂载的div,这个div需要设置上一个id,这样方便通过getElementById来获取。

        <div id="test"></div>

        <script type="text/javascript">
             var para = document.createElement("p");//创建一个p标签节点
             var txt  = document.createTextNode("文本内容");//创建一个文本节点,指定相关的内容
             para.appendChild(txt);//把文本节点添加到p标签节点
             document.getElementById("test").appendChild(para);//把p标签节点,添加到div中
        </script>

  这样就完成了动态的创建节点。

  Ajax异步请求

  首先针对不同的浏览器,创建XMLHttpRequest对象,可以采取下面的方法:

            function getHTTPObject(){
                if(typeof XMLHttpRequest == "undefined"){
                    XMLHttpRequest = function(){
                        try{
                            return new ActiveXObject("Microsoft.XMLHTTP");
                        }catch(e){}
                        return false;
                    }
                }
                return new XMLHttpRequest();
            }

  这样就可以返回浏览器支持的request对象了。然后创建对应的request的open send onreadystatechange方法。

  这里直接放在一个方法中:

            function getNewContent(){
                var request = getHTTPObject();
                if(request){
                    request.open("GET","test.txt",true);
                    request.onreadystatechange = function(){
                        if(request.readyState == 4){
                            //核心代码
                        }
                    };
                    request.send(null);
                }else{
                    console.log("Browser does not support XMLHttpRequest");
                }
                console.log("Function Done!");
            }

  然后等待出发getNewContent就可以了。

  全部代码:

<!doctype html>
<html>
    <head>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
         <title>Ajax test</title>
    </head>
    <body>
        <div id="test"></div>

        <script type="text/javascript">
            function getHTTPObject(){
                if(typeof XMLHttpRequest == "undefined"){
                    XMLHttpRequest = function(){
                        try{
                            return new ActiveXObject("Microsoft.XMLHTTP");
                        }catch(e){}
                        return false;
                    }
                }
                return new XMLHttpRequest();
            }

            function getNewContent(){
                var request = getHTTPObject();
                if(request){
                    request.open("GET","test.txt",true);
                    request.onreadystatechange = function(){
                        if(request.readyState == 4){
                            console.log("Response Received!");
                            var para = document.createElement("p");
                            var txt  = document.createTextNode(request.responseText);
                            para.appendChild(txt);
                            document.getElementById("test").appendChild(para);
                        }
                    };
                    request.send(null);
                }else{
                    console.log("Browser does not support XMLHttpRequest");
                }
                console.log("Function Done!");
            }

            function addLoadEvent(func){
                var oldonload = window.onload;
                if(typeof window.onload != 'function'){
                    window.onload = func;
                }else{
                    window.onload = function(){
                        oldonload();
                        func();
                    }
                }
            }

            addLoadEvent(getNewContent);
        </script>
    </body>
</html>

  执行结果:

  Chrome处理本地Ajax异步请求

  由于Chrome不支持本地的异步请求,因此直接通过file://访问文件就会报错!

  报错信息如下:

  XMLHttpRequest cannot load file:///C:/Users/Administrator/Desktop/test.txt. Cross origin requests are only supported for protocol schemes: http, data, chrome-extension, https, chrome-extension-resource.

  Uncaught NetworkError: Failed to execute 'send' on 'XMLHttpRequest': Failed to load'file:///C:/Users/Administrator/Desktop/test.txt'.

 

  所以在Chrome的快捷方式后面添加:--allow-file-access-from-files 即可。注意后面要添加一个空格,不然会提示错误!

  正确的写法:

  "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files

  这样就可以正确访问了。

  参考:

  【1】《Javascript DOM编程艺术》

  【2】如何解决XMLHttpRequest cannot load...:http://blog.csdn.net/dandanzmc/article/details/31344267/

本文转自博客园xingoo的博客,原文链接:Ajax与DOM实现动态加载,如需转载请自行联系原博主。

时间: 2024-07-28 22:36:40

Ajax与DOM实现动态加载的相关文章

Ajax与DOM实现动态加载的例子

下面我们来看一篇文章. 首先说下问题背景:想要通过异步请求一个文本文件,然后通过该文件的内容动态创建一个DOM节点添加到网页中. 基于这个需要了解: 1 DOM如何动态添加节点 2 Ajax异步请求 3 Chrome浏览器如何处理本地请求 DOM如何动态添加节点 想要动态的添加节点,就需要良好的理解DOM文档. 常用的几个方法: getElementById()  getElementsByTagName() getAttribute() setAttribute() 以及 createElem

php+ajax实现无刷新动态加载数据技术

  无刷新功能我们用到很多很多的,下面我就来给各位介绍一个实例,就是实现php+ajax实现无刷新滚屏加载数据,例子非常的简单大家只要按流程来操作就可以了哦. 我们浏览有些网页的时候,当拉动浏览器的滚动条时到页底时,页面会继续自动加载更多内容供用户浏览.这种技术我暂且称它为滚屏加载技术.我们发现很多网站用到这种技术,必应图片搜索.新浪微博.QQ空间等将该技术应用得淋漓尽致. 滚屏加载技术,就是使用Javascript监视滚动条的位置,每次当滚动条到达浏览器窗口底部时,触发一个Ajax请求后台PH

php+ajax实现无刷新动态加载数据技术_php实例

我们浏览有些网页的时候,当拉动浏览器的滚动条时到页底时,页面会继续自动加载更多内容供用户浏览.这种技术我暂且称它为滚屏加载技术.我们发现很多网站用到这种技术,必应图片搜索.新浪微博.QQ空间等将该技术应用得淋漓尽致. 滚屏加载技术,就是使用Javascript监视滚动条的位置,每次当滚动条到达浏览器窗口底部时,触发一个Ajax请求后台PHP程序,返回相应的数据,并将返回的数据追加到页面底部,从而实现了动态加载,其实就是一个典型的Ajax应用.本文将使用jQuery,结合PHP,mysql以及JS

Ajax基础教程(4)- 实现基本Ajax技术 4.3 动态加载列表框

Web应用通常使用"向导工具"设计原则来构建,即每个屏幕要求用户输入少量的信息,每个后续页的数据都依据前一页的输入来创建.对于某些情况,这个设计模式非常有用,如用户以一种逐步.有序的方式完成任务.遗憾的是,太多的Web应用使用了这种方法,因为它们别无选择.在Ajax技术出现之前,当基于用户输入修改页面上的某些部分时,动态地更新页面而不刷新整个页面是很难办到的,甚至根本不可能. 避免完全页面刷新的一种技术是在页面上隐藏数据,并在需要时再显示它们.例如,假设选择框B的值要根据选择框A中所选

async和DOM Script文件加载比较_php技巧

目前我用demo.js作为执行文件操作.代码: var now = function() { return +(new Date()); } var t_s = now(); while(now() - t_s < 2000) { } 用sleep.php作为请求文件操作.代码: <?php sleep(3); echo 'var bb'; ?> 1. 一般script标签加载 <script src="demo.js"></script> &

DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)_jquery

Datatables是一款jquery表格插件.它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能. 主要功能 分页,即时搜索和排序 几乎支持任何数据源:DOM, javascript, Ajax 和 服务器处理 支持不同主题 DataTables, jQuery UI, Bootstrap, Foundation 各式各样的扩展: Editor, TableTools, FixedColumns -- 丰富多样的option和强大的API 支持国际化 超过2900+个单元测试 免

Ajax基础教程(2)-使用XMLHttpRequest对象 2.7 DOM Level 3 加载和保存规约

到目前为止,我们讨论的解决方案都不是标准.尽管XMLHttpRequest得到了广泛支持,但是你已经看到了,创建XMLHttpRequest对象的过程会随浏览器不同而有所差异.许多人错误地认为Ajax得到了W3C的支持,但实际上并非如此.W3C在一个新标准中解决了这一问题以及其他缺点,这个标准的名字相当长:DOM Level 3 加载和保存规约.这个规约的设计目的是以一种独立于平台和语言的方式,用XML内容修改DOM文档的内容.2004年4月提出了1.0版本,但到目前为止,还没有浏览器实现这个规

ajax 动态加载数据提示没有更多内容加载了

问题描述 ajax 动态加载数据提示没有更多内容加载了 怎么判断所有的数据已经加载完毕,提示没有更多内容加载了? if(data=='') 这个判断有误,求高人指点 解决方案 如果是分页你自己服务器端计算好总页数赋值给js变量,然后js设置一个当前页变量,每次加载后和总量对比就好了,干么多请求一次服务器由服务器返回空内容来控制是否加载完呢.. 解决方案二: 不知道你想问什么,data是什么?你的返回值怎么判断没有内容了.你的判断有误怎么得出的结论?有误的时候data什么值 解决方案三: data

Ajax实现动态加载组合框的实例代码

一  province.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <script type="text/javascript" language="javaScript"> var xmlHttp = false; //全局变量,