3

我有以下代码:

xmlDoc=loadXMLDoc("dbbackup.xml");
x=xmlDoc.getElementsByTagName("record");
alert(x);
for (i=0;i<3;i++) {
  newel=xmlDoc.createElement("edition");
  newtext=xmlDoc.createTextNode("first");
  alert("x  : "+x[i]);
  alert("newtext :"+newtext.nodevalue);
  x[i].appendChild(newel);
  alert("sd");
}
function loadXMLDoc(dname) {
  if (window.XMLHttpRequest) {
    xhttp=new XMLHttpRequest();
  } else {
    xhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xhttp.open("GET",dname,false);
  xhttp.send();
  return xhttp.responseXML;
}

dbbackup.xml在同一位置创建了 XML 文件,如下所示:

<sticky>
  <record></record>
</sticky>

但是在运行我的脚本后,xml文件没有得到更新。

4

4 回答 4

1

SomeKidWithHTML 是对的。

JavaScript 旨在仅修改内存中加载在浏览器框架内的文件。

将浏览器视为您的孩子(html、xml 等)可以在其中玩的沙盒。只要 Johnny (xml) 在沙盒中玩,一切都很好。但是如果约翰尼被允许在那个沙盒之外玩,想想网站可能在你的机器上造成的破坏。

JavaScript 本身不可能永久影响本地计算机上的文件。它只能在沙箱内运行(在本地,它可以调用 Java 或其他 API 来影响更改,但这是另一回事)。

JavaScript 只是客户端。如果您希望它影响服务器,它只能通过回调服务器来实现。在服务器上,您将需要某种编程(asp.net、java、php、html 等)来接收和应答该呼叫并对其进行处理。

JavaScript 本身非常强大……但仅限于沙箱(浏览器)。要让它影响该浏览器之外的任何其他内容,它必须依赖于已经存在并准备好接收这些请求的其他程序。

而这一切都是以安全的名义,主要是。

于 2012-08-14T06:36:34.680 回答
1

您可以从客户端的网页收集数据并将它们发送到服务器(ajax),然后服务器将生成 xml 文件并发送回文件的链接(ajax)。使用 javascript 使用服务器返回的链接生成下载链接。

这是我在我的一个项目中解决问题的方法。

于 2013-07-12T13:28:17.510 回答
1

Javascript 不能修改磁盘上的文件,它只能在客户端的 Web 浏览器中为客户端运行。

要实际写入和写入服务器上的文件,您必须使用服务器端语言和技术,例如 PHP 或 ASP。

于 2012-08-14T06:01:37.903 回答
1

我做了这个 - 在客户端制作 XML,然后使用日常实践 Mike

函数 makeSlot() {

  var xmlhttp = new XMLHttpRequest();    
  xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) showBon(); } 
  xmlhttp.open("POST","crMakeSlot.php",true);  
  xmlhttp.send(wrapUp());  
}

/***
* make the final transaction - using XML
*/
function wrapUp () {   

  var transaction = document.implementation.createDocument("","", null);           

  var operator = document.createElement("operator");
  var textblok1 = document.createTextNode(document.getElementById("rText").value);
      operator.appendChild(textblok1);         

  var root = document.createElement("transaction"); 
      root.setAttribute("tstamp",  now);
      root.setAttribute("sequenceno", zSequenceNo.textContent);
      if (parseInt(document.getElementById("zDankort").value) > 0) root.setAttribute("dankort", document.getElementById("zDankort").value);        
      if (parseInt(document.getElementById("zCash").value) > 0) root.setAttribute("cash", document.getElementById("zCash").value);              
      if (parseInt(document.getElementById("zCredit").value) > 0) root.setAttribute("credit", document.getElementById("zCredit").value);              
      if (parseInt(document.getElementById("zCheck").value) > 0) root.setAttribute("check", document.getElementById("zCheck").value);              
      if (parseInt(document.getElementById("zGiftcard").value) > 0) root.setAttribute("giftcard", document.getElementById("zGiftcard").value);              
      if (parseInt(document.getElementById("zVoucher").value) > 0) root.setAttribute("voucher", document.getElementById("zVoucher").value);              

      root.appendChild(operator);

  var divObj = document.getElementsByTagName("div");   

/***
*  when column value is 4, then we have our data complete - next cycle 
*/
  for (ix = 0; ix < divObj.length; ix++) {     
    switch (divObj[ix].getAttribute("column")) {
     case "1": var row = document.createElement("row"); row.setAttribute("item",divObj[ix].textContent);
     case "2": row.setAttribute("price",divObj[ix].textContent);        
     case "3": row.setAttribute("quantum",divObj[ix].textContent);        
     case "4": root.appendChild(row); 
     default: break;                 
    }
  }        
  transaction.appendChild(root);
  return(transaction);
}
于 2012-08-14T06:11:20.137 回答