如何使用ajax和javascript保存xml文件
我正在尝试向xml文件添加一个元素。我已经用调试器检查了这个程序,我看到它确实将元素添加到了xml文件中,但是当我停止运行时,该文件没有保存任何更改。 以下是javascript文件:如何使用ajax和javascript保存xml文件,javascript,ajax,xml,Javascript,Ajax,Xml,我正在尝试向xml文件添加一个元素。我已经用调试器检查了这个程序,我看到它确实将元素添加到了xml文件中,但是当我停止运行时,该文件没有保存任何更改。 以下是javascript文件: var xmlhttp = LoadXMLHttp(); var xmlDoc=LoadXMLDoc("XMLFile.xml");; function LoadXMLHttp() { var xmlHttp; if (window.XMLHttpRequest) xmlHttp
var xmlhttp = LoadXMLHttp();
var xmlDoc=LoadXMLDoc("XMLFile.xml");;
function LoadXMLHttp() {
var xmlHttp;
if (window.XMLHttpRequest)
xmlHttp = new XMLHttpRequest();
else
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
return xmlHttp;
}
function LoadXMLDoc(FileName) {
xmlhttp.open("GET", FileName, false);
xmlhttp.send(null);
return xmlhttp.responseXML;
}
function CreateXmlElement() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
newMessageElement = xmlDoc.createElement("message");
newTextElement = xmlDoc.createElement("text");
newText = xmlDoc.createTextNode("I am fine");
newTextElement.appendChild(newText);
newMessageElement.appendChild(newTextElement);
x = xmlDoc.documentElement;
x.appendChild(newMessageElement);
}
}
function AddXMLElement() {
xmlhttp.open("POST", "Default.aspx", true);
xmlhttp.setRequestHeader("Accept", "text/xml");
xmlhttp.onreadystatechange = CreateXmlElement;
xmlhttp.send(xmlDoc);
}
下面是xml文件:
<?xml version="1.0" encoding="utf-8" ?>
<conversation>
<message>
<text>Hi</text>
</message>
<message>
<text>How are you?</text>
</message>
</conversation>
你好
你好吗?
顺便说一下:
php
,但我知道asp.net
AddXMLElement()
函数您正在执行
CreateXmlElement
方法作为对AJAX帖子的回调。因此,您可以在将文档发送到服务器之后而不是之前修改文档。这就是为什么不保存修改后的文档
您可能希望执行以下操作:
function CreateXmlElement() {
newMassageElement = xmlDoc.createElement("massage");
newTextElement = xmlDoc.createElement("text");
newText = xmlDoc.createTextNode("I am fine");
newTextElement.appendChild(newText);
newMassageElement.appendChild(newTextElement);
x = xmlDoc.documentElement;
x.appendChild(newMassageElement);
}
function AddXMLElement() {
CreateXmlElement();
xmlhttp.open("POST", "Default.aspx", true);
xmlhttp.setRequestHeader("Accept", "text/xml");
xmlhttp.send(xmlDoc);
}
这个结构适合我。它打开一个xml文件,更改一个标记并将其保存回服务器。。 HTML部分:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>xml </title>
</head>
<body>
<div id="xml_tag0" >
zero
</div>
<div id="xml_tag" >
Start!!
</div>
<div id="xml_tag2" >
Start!!
</div>
</body>
<script type="text/javascript" src="./js/jquery.min.js"></script>
<script type="text/javascript" src="./js/test_xml_load_and_save.js" charset="utf-8"></script>
</html>
xml
0
开始
开始
JavaScript部分(test_xml_load_和_save.js):
$.ajax({
键入:“GET”,
url:“../php/B.xml”,
数据类型:“文本”,
成功:函数(xml){
doc=$.parseXML(xml)
$('#xml_标记').text($(doc.find('row FIELD2').eq(2.text());
console.log($(doc.find('row FIELD2')).eq(2.text());
$(doc.find('row FIELD2').eq(2).text('50%);
xml=(新的XMLSerializer()).serializeToString(doc);
//var数据字符串=“”;
var-dataString=xml;
$('#xml_tag0')。文本(xml);
$.ajax({
键入:“POST”,
url:“../php/ToXML.php”,
contentType:“text/xml”,
数据类型:'text',
数据:{xml:dataString},
cache:false,
成功:功能(响应){
控制台日志(响应);
$('#xml_tag2')。文本(响应);
},
成功:功能(数据){
console.log('log success:'+数据);
$('#xml_tag2').text('日志成功:'+数据);
}
});
}});
PHP部分(PHP/ToXML.PHP):
XML文件:
<?xml version="1.0" encoding="UTF8"?>
<root>
<row>
<FIELD1>Cat1</FIELD1>
<FIELD2>Min</FIELD2>
<FIELD3>Neutral</FIELD3>
<FIELD4>Max</FIELD4>
</row>
<row>
<FIELD1>Liquid</FIELD1>
<FIELD2>0%</FIELD2>
<FIELD3>7%</FIELD3>
<FIELD4>65%</FIELD4>
</row>
<row>
<FIELD1>Bonds</FIELD1>
<FIELD2>25%</FIELD2>
<FIELD3>50%</FIELD3>
<FIELD4>70%</FIELD4>
</row>
<row>
<FIELD1>Equities</FIELD1>
<FIELD2>10%</FIELD2>
<FIELD3>25%</FIELD3>
<FIELD4>35%</FIELD4>
</row>
<row>
<FIELD1>AltInv</FIELD1>
<FIELD2>0%</FIELD2>
<FIELD3>18%</FIELD3>
<FIELD4>30%</FIELD4>
</row>
</root>
第一类
分钟
中立的
马克斯
液体
0%
7%
65%
债券
25%
50%
70%
股票
10%
25%
35%
阿尔廷夫
0%
18%
30%
您必须支持哪些浏览器?上面的整个内容非常粗糙,对于支持IE6和IE5.5之类的浏览器非常有用,我怀疑您是否真的需要支持这些浏览器。请澄清这一点。我不确定我是否理解正确。您是指xmlhttp.onreadystatechange=CreateXmlElement;应该在“开放”之前写吗?@Xshibi我已经更新了我的答案,但我不得不承认,有点不清楚你想做什么。据我所知:1)从服务器获取文件,2)修改XML,3)将修改后的XML发回服务器。谢谢您的回答,但它仍然不起作用。我基本上是在尝试为我的学校项目创建一个聊天系统。问题在于,当用户(me)尝试向另一个用户发送消息时,该消息不会添加到包含对话的xml文件中。所以我创建了一个小项目来解决这个问题。@Xshibi您是否要在服务器端再次保存发布的XML文件?该保存功能在javascript中不起作用,我认为发布会保存文件。你知道我该怎么解决吗?
<?php
header('Content-Type: text/html; charset=UTF-8');
$data = $_POST['xml'];
$xml = file_get_contents('php://input');
$xml = rawurldecode($xml);
$xml = str_replace('+', '', $xml);
$xml = str_replace('xml=', '', $xml);
//echo ":".$xml;
$xml = '<?xml version="1.0" encoding="UTF-8"?>' . $xml;
$filename = "B.xml";
$f = fopen($filename, 'w+');
fwrite($f, $xml);
fclose($f);
echo "Ok";
?>
<?xml version="1.0" encoding="UTF8"?>
<root>
<row>
<FIELD1>Cat1</FIELD1>
<FIELD2>Min</FIELD2>
<FIELD3>Neutral</FIELD3>
<FIELD4>Max</FIELD4>
</row>
<row>
<FIELD1>Liquid</FIELD1>
<FIELD2>0%</FIELD2>
<FIELD3>7%</FIELD3>
<FIELD4>65%</FIELD4>
</row>
<row>
<FIELD1>Bonds</FIELD1>
<FIELD2>25%</FIELD2>
<FIELD3>50%</FIELD3>
<FIELD4>70%</FIELD4>
</row>
<row>
<FIELD1>Equities</FIELD1>
<FIELD2>10%</FIELD2>
<FIELD3>25%</FIELD3>
<FIELD4>35%</FIELD4>
</row>
<row>
<FIELD1>AltInv</FIELD1>
<FIELD2>0%</FIELD2>
<FIELD3>18%</FIELD3>
<FIELD4>30%</FIELD4>
</row>
</root>