js如何将服务器上的xml文件缓存到本机?

JavaScript09

js如何将服务器上的xml文件缓存到本机?,第1张

在第一次请求的时候

如果是动态生成你就在服务器的response header上加上Last-Modified

然后你第二次请求的头上就会有If-Modified-Since

这个时间就是你第一次请求道本地的时间

如果服务的 文件的属性 不比你新

服务器就返回304 .然后你浏览器自然就在缓存里面取这个 xml

主要是服务器返回304

如果是请求静态文件 那一般的服务器都会自动的加上Last-Modified的

假设你的XML文件在js中的变量名为 xmldoc,并且已经成功读取试题信息

首先,你能根据页面上标签组装好XML数据流,或者在用户修改操作的时候,将修改的结果即时反应到xmldoc上相应的节点也可以

更改xml节点的操作,首先通过XPath找到节点(node),在通过节点(node)操作node.setAttribute(attrName, value)

4

然后,直接将xmldoc提交给服务端保存就可以了

这个是我用的代码:

if (!window.ActiveXObject) {

Element.prototype.selectNodes = function(sXPath) {

var oEvaluator = new XPathEvaluator()

var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null)

var aNodes = new Array()

if (oResult != null) {

var oElement = oResult.iterateNext()

while(oElement) {

aNodes.push(oElement)

oElement = oResult.iterateNext()

}

}

return aNodes

}

Element.prototype.selectSingleNode = function(sXPath) {

var oEvaluator = new XPathEvaluator()

// FIRST_ORDERED_NODE_TYPE returns the first match to the xpath.

var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)

if (oResult != null) {

return oResult.singleNodeValue

} else {

return null

}

}

}

function XMLDocument() {

var xmlDoc = null

if (window.ActiveXObject) {

xmlDoc = new ActiveXObject("Microsoft.XMLDOM")

} else if (document.implementation &&document.implementation.createDocument){

// code for Mozilla, Firefox, Opera, etc.

xmlDoc=document.implementation.createDocument("","",null)

} else {

alert('Your browser cannot handle this script')

}

xmlDoc.async=false

return xmlDoc

}

function selectSingleNode(xmlDoc, elementPath) {

if(window.ActiveXObject) {

return xmlDoc.selectSingleNode(elementPath)

} else {

var xpe = new XPathEvaluator()

var nsResolver = xpe.createNSResolver( xmlDoc.ownerDocument == null ? xmlDoc.documentElement : xmlDoc.ownerDocument.documentElement)

var results = xpe.evaluate(elementPath,xmlDoc,nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE, null)

return results.singleNodeValue

}

}

/*

//var ret = xmlDoc.loadXML("<?xml version=\"1.0\" encoding = \"GB2312\" ?><html>sdfasdfasdf</html>")

//var d = xmlDoc.load(fileName)

var xmlDoc = new XMLDocument()

var s = xmlDoc.loadXML('<t>dsadf</t>')

if( s ) {

var elements = xmlDoc.getElementsByTagName('t')

var element = elements[0]

var newElement = xmlDoc.createElement('DIV')

element.appendChild(newElement)

newElement.text = 'newdivs'

xmlDoc.save('C:\\im.xml')

}

*/

回楼下的朋友,我再前面已经说过提交给服务端,下面的代码只是用来参考,浏览器肯定是没有写权限的

可以修改,我对JS并不是非常熟悉,给你一段代码参考一下。<script>

var xmldom

function test()

{

xmldom = new ActiveXObject("Msxml2.DOMDocument")

xmldom.async = false

xmldom = document.all.mxh.XMLDocument

}

function test2()

{

var xmldom = new ActiveXObject("Msxml2.DOMDocument")

xmldom.async = false

xmldom = document.all.mxh.XMLDocument

node = xmldom.selectSingleNode("//nodeB")

node2 = xmldom.createElement("nodeB")

node2.text=parseInt(node.text)+1

xmldom.documentElement.replaceChild(node2,node)

node = xmldom.selectSingleNode("//nodeB")

alert(node.text)

alert(xmldom.xml)

}

function test3()

{

document.f.xmldata.value= document.all.mxh.XMLDocument.xml

alert(document.f.xmldata.value)

document.f.submit()

}

</script>

<body>

<XML id=mxh>

<root>

<nodeA>nodeA</nodeA>

<nodeB>30</nodeB>

</root>

</XML>

<form name=f action="xx.asp">

<input name=xmldata type=hidden>

<input onclick="test()" type="button" value=old>

<input onclick="test2()" type="button" value=请多点几次>

<input onclick="test3()" type="button" value=保存>

</form>

保存,调用 xmldom.save("xxx.xml")