2012-08-14 63 views
3

一个XML文件,我有以下代码:创建使用Javascript

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文件没有得到更新。

回答

1

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

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

+0

是否有任何其他方式使用JavaScript创建xml文件而不使用服务器端脚本? – user1597148 2012-08-14 06:10:00

+0

没有。Javascript没有能力与服务器端进行交互,没有服务器端语言。 AJAX请求提交文件,但就是这样。 – Polyov 2012-08-14 06:33:40

+0

就SomekidwithHTML有关AJAX的评论而言,您可以使用JavaScript创建XML,然后使用类似jQuery AJAX的东西将此信息发回给控制器方法。然后你可以使用控制器保存到磁盘/数据库/不管。我来自MVC。NET背景(这里的示例实现http://stackoverflow.com/a/8517361/201648),但应该可以在大多数Web语言/框架中实现相同的模式。我想我应该详细说明这一点,因为这是一个相当常见的模式。 – 2013-02-03 05:55:57

1

我做了这一点 - 在客户端进行XML然后使用日常praksis 迈克

功能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); 
} 
1

SomeKidWithHTML是正确的。

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

将浏览器视为您的孩子(html,xml等)可以播放的沙箱。只要Johnny(xml)在沙箱中播放,一切都很好。但是如果Johnny被允许在沙箱外玩,只要想想网站可能会在你的机器上造成的破坏。

有没有办法JavaScript可以永久影响本地计算机上的文件,本身。它只能在沙盒内玩(本地,它可以调用Java或其他API来影响变化,但这是一个完整的其他处理)。

JavaScript仅限客户端。如果你期望它影响服务器,它只能通过回调服务器来完成。在服务器上,你将需要一些编程(asp.net,java,php,html等)来接收和回答这个调用,并用它做一些事情。

JavaScript本身功能非常强大......但只能在沙盒(浏览器)中使用。为了影响浏览器以外的其他任何内容,它必须依赖于已经存在的其他程序并准备好接收这些请求。

这大都是以安全为名。

1

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

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