首先说下问题背景:想要经过异步请求一个文本文件,而后经过该文件的内容动态建立一个DOM节点添加到网页中。javascript
基于这个须要了解:html
1 DOM如何动态添加节点java
2 Ajax异步请求chrome
3 Chrome浏览器如何处理本地请求编程
想要动态的添加节点,就须要良好的理解DOM文档。浏览器
经常使用的几个方法:app
getElementById() getElementsByTagName() getAttribute() setAttribute()异步
以及ide
createElement() createTextNode() appendChild()ui
等等。
下面看一下建立一个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>
这样就完成了动态的建立节点。
首先针对不一样的浏览器,建立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不支持本地的异步请求,所以直接经过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/