Сохранить текущий DOM в файл на сервере, используя PHP, Ajax, jQuery? - PullRequest
0 голосов
/ 22 апреля 2020

Я искал везде, но каждое решение, которое я нашел, до сих пор не работало для меня.

Я создаю приложение для веб-сайта, где люди могут создавать свои собственные слайд-шоу. Когда пользователь нажимает кнопку «Сохранить», я хочу, чтобы текущий DOM был сохранен в виде файла HTML на моем веб-сервере.

Первый метод, который я попробовал, использует Ajax, но ничего не возвращается:

AJAX

 function chk() { 
  var elHtml = document.getElementById('dropzone').innerHTML;
  console.log("inside chk");
  $.ajax({
    type: "POST",
    url: 'https://www.tap-plus.org/wp-content/themes/Avada/softwarefiles/savefile.php',
    dataType: 'json',
    data: {functionname: 'write_to_server', arguments: [elHtml] },
    cache:false,
    success: function (obj) {
    if( !('error' in obj) ) {
      $('#msg').html(obj);
    }
    else {
    console.log(obj.error);
    }
    }
  });
  return false;
}

savefile. php

function write_to_server($html_code) { 
    $html_string = $_POST['arguments'][0];
    var_dump($html_string);
    echo 'test';
}

html <input type="submit" id="saving" class="btn btn-primary pull-right" value="Save2" onclick="return chk()"/>

Приведенный выше метод ничего не возвращает. Второй метод, который я попробовал, был выбор текущего DOMDocument с loadHTMLFile текущего URL сайта. Возвращено значение null.

DOMDocument

$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTMLFile('https://https://www.tap-plus.org/tapplus-software/');
var_dump($dom);

результат:

object(DOMDocument)#3045 (35) { ["doctype"]=> NULL ["implementation"]=> string(22) "(object value omitted)" ["documentElement"]=> NULL ["actualEncoding"]=> NULL ["encoding"]=> NULL ["xmlEncoding"]=> NULL

Кроме того, я хочу выполнить sh это без страницы перезагрузка, если это возможно. В идеале, если кто-то нажмет кнопку «Сохранить» в слайд-шоу, над которым он работает, он не захочет, чтобы страница внезапно перезагрузилась. Я не уверен, что я делаю не так или какие дальнейшие шаги будут, чтобы решить эту проблему. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Решено! Для меня было решением нажать кнопку сохранения, вернуть код html определенного элемента и предотвратить обновление страницы:

AJAX

var url = '/savefile.php';
function chk() { 
  var elHtml = document.getElementById('outer-content').innerHTML;
  console.log("inside chk");
  $.ajax({
    type: "POST",
    url: url,
    data: {myCode: elHtml },
    success: function (obj) {
      console.log("success outer");
        $('#msg').html(obj);
        console.log("success");
    }
  });
  console.log(url);
  return false;
}

PHP

          $html_val = $_POST[ 'myCode' ];

          var_dump($html_val);

На самом деле все было намного проще, чем я думал.

0 голосов
/ 22 апреля 2020

PHP должен отображать JSON, а не HTML.

function write_to_server($html_code) { 
    $html_string = $_POST['arguments'][0];
    echo json_encode(array('msg' => 'Data saved successfully'));
}

И код jQuery должен отображать сообщение.

    if( !('error' in obj) ) {
        $('#msg').html(obj.msg);
    }
    else {
        console.log(obj.error);
    }
...