通过AJAX和PHP进行简单的实时HTML编辑

时间:2018-01-04 23:31:15

标签: php html ajax

我试图聚集一个简单的小网站,我可以在其上编辑一个数字。此更改(onblur)将通过AJAX发送到PHP脚本,将编辑后的数字写回HTML文件。

我做到了这一点,但无法让PHP和DOMXpath工作。

网站(index.html):

<div class="actualcount" contenteditable="true">254</div>

使用Javascript:

$.ajax({
     url: "save.php",
     type: "POST",
     data: {postdata: $(".actualcount").html()} ,
})

PHP:

<?php
     $editData = $_POST['postdata'];
     $newText = '<div class="actualcount" contenteditable="true">'.$editData.'</div>';
     $html = file_get_contents('index.html');
     $dom = new DOMDocument;
     $dom->loadHTML($html);
     $xpath = new DOMXPath($dom);
     $actualcount = $xpath->query('//*[@class="actualcount"]')->item(0);
     $actualcount->parentNode->replaceChild($newText, $actualcount);
     $dom->saveHTMLFile("index.html");
?>

它给了我一个

  

致命错误:未捕获的TypeError:参数1传递给   DOMNode :: replaceChild()必须是DOMNode的一个实例,给定字符串......

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

replaceChild将2个节点元素作为参数,您传递的第一个元素是一个字符串!你需要创建一个元素。

这是DOMDocument::createElementDOMElement::setAttribute

如何做到这一点的简单示例
<?php
     if(isset($_POST['postdata'])) {
         $editData = (string) $_POST['postdata']; 
     } else {
         $editData = '';
     }

     $html = file_get_contents('index.html');
     $dom = new DOMDocument;
     libxml_use_internal_errors(true);
     $dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
     libxml_clear_errors();
     $xpath = new DOMXPath($dom);
     $actualcount = $xpath->query('//*[@class="actualcount"]')->item(0);
     $newnode = $dom->createElement('div', $editData); 
     $newnode->setAttribute("class", "actualcount");
     $newnode->setAttribute("contenteditable", "true");
     $actualcount->parentNode->replaceChild($newnode, $actualcount);
     $dom->saveHTMLFile("index.html");
?>