我需要保存一个网页,其内容会动态变化。例如,用户可以添加自定义函数,并将其添加到自定义函数下拉列表中。我想使用 PHP 和 AJAX 保存"新"更新的页面。我尝试通过将元素包装在"主体"div 中来获取所有元素的内部 HTML。当我使用警报框显示结果时,似乎捕获了所有数据。但是,当我使用 POST AJAX 方法将数据发布到我的 savedata.php 文件时,数据不会保存。仅保存数据的前几行。
选择框中的新选项和文本区域的内容也不会保存。但是,如果我单独尝试保存文本区域并使用 .value 而不是有效的 innerHTML 选择框数据。
简而言之,我的问题是,为什么不保存内部HTML数据,尽管当我使用documentGetById("main-body").innerHTML获取页面的所有内容时,警报框显示所有数据。这是一些代码
Javascript 和 AJAX 代码
function savehtml()
{
//Make ajax call after setting up variables
var saveme=document.getElementById('txtArea').innerHTML
var filename = document.getElementById('nameoff').value
var parameters="saveme="+saveme+"&filename="+filename
ajaxr('savedata.php', "result", parameters)
}
function ajaxRequest() {
var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]
if (window.ActiveXObject) {
for (var i=0; i<activexmodes.length; i++) {
try {
return new ActiveXObject(activexmodes[i])
}
catch(e) {
//suppress error
}
}
}
else if (window.XMLHttpRequest) // if Mozilla, Safari etc
return new XMLHttpRequest()
else
return false
}
function ajaxr(phpfilename, idofinnerhtml, parameters)
{
var mygetrequest=new ajaxRequest()
mygetrequest.onreadystatechange=function() {
if (mygetrequest.readyState==4) {
if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1) {
alert(parameters)
document.getElementById(idofinnerhtml).innerHTML="Result: "+mygetrequest.responseText
/*document.getElementById("catbody").value="Result : "+mygetrequest.responseText*/
}
else {
document.getElementById(idofinnerhtml).innerHTML="Result: Failed "
}
}
}
mygetrequest.open("POST", phpfilename, true)
mygetrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
mygetrequest.send(parameters)
}
网页代码
<body>
<div id="main-body">
<table>
<tr>
<td>
<textarea id="txtArea" name="txtArea" rows="10" cols="100"><?
?></textarea><br><br>
</td>
<h2>Quick tools</h2>
<button onclick="addsigns();">Add a sign</button><br>
<input type="radio" id="andsign" name="whichsign" value="&&">&&
<input type="radio" id="orsign" name="whichsign" value="||">||
<input type="radio" id="notsign" name="whichsign" value="!">!
....
<td>
<h2>Save file</h2>
<input id="nameoff" type="text">
<button onclick="savehtml();">Save html</button><br>
</td>
菲律宾代码
$data=$_POST['saveme'];
$filename=$_POST['filename'];
echo $data;
$handle = fopen($filename, 'w+');
flock($handle, LOCK_EX);
fwrite($handle, $data);
flock($handle, LOCK_EX);
fclose($handle);
已解决的问题:
猜猜我似乎已经找到了问题所在。该问题是由于同时使用两个浏览器引起的。显然,Internet Explorer 8 即使在内部 HTML 中也显示了文本区域的值,但 Firefox 没有。因此,当您使用 Internet Explorer 保存数据时,您具有调用 innerHTML 时存储的值。至于Firefox,你需要使用.value来获取textarea的值,因为innerHTML不会包含它。由于我在两个浏览器中都进行了测试,因此我必须查看一个浏览器的警报内部HTML代码,认为它在另一个浏览器中是相同的,然后用另一个浏览器的代码覆盖了我的文件。无论如何,感谢那些做出贡献的人的帮助。希望它能帮助那些和我有类似问题的人。
删除此行上的"+"(不读取任何内容):
$handle = fopen($filename, 'w+');
您要写入的文件/文件夹需要具有服务器可以访问的写入权限。