1

我需要保存一个内容动态变化的网页。例如,用户可以添加自定义函数并将它们添加到自定义函数下拉列表中。我想使用 PHP 和 AJAX 保存“新”更新的页面。我尝试通过将所有元素包装在“主体”div 中来获取所有元素的 innerHTML。当我用警告框显示结果时,似乎所有数据都被捕获了。但是当我使用 POST AJAX 方法将数据发布到我的 savedata.php 文件时,数据不会被保存。仅保存数据的前几行。

选择框中的新选项和文本区域的内容也不会保存。但是,如果我单独尝试使用 .value 而不是 innerHTML 保存 textarea 并选择框数据。

简而言之,我的问题是,尽管当我使用 documentGetById("main-body").innerHTML 获取页面的所有内容时,警报框显示了所有数据,但为什么不保存 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)
}

HTML 代码

<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>

php代码

$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 甚至在 innerHTML 中也显示了 textarea 的值,但 Firefox 没有。因此,当您使用 Internet Explorer 保存数据时,您会在调用 innerHTML 时存储该值。至于firefox,您需要使用 .value 来获取 textarea 的值,因为 innerHTML 不会包含它。由于我在两种浏览器中都进行了测试,因此我必须查看其中一个的警报 innerHTML 代码,认为它在另一个浏览器中是相同的,然后用另一个浏览器的代码覆盖了我的文件。无论如何,感谢那些做出贡献的人的帮助。希望它能帮助那些和我有类似问题的人。

4

1 回答 1

0

删除此行上的“+”(不读取任何内容):

$handle = fopen($filename, 'w+');

您正在写入的文件/文件夹需要具有服务器可以访问的写入权限。

于 2013-09-15T09:21:44.637 回答