2015-02-24 4 views
0

У меня есть страница, которую я отредактировал после загрузки, и что я хочу сделать, это получить текущие HTML-страницы и передать их скрипту PHP.Javascript получить текущую страницу html (после редактирования)

Я впервые передал документ.documentElement.innerHTML, но это закончилось тем, что в нем собралась куча вычисленного мусора стиля вверху, которого я не хотел. После googling вокруг я обнаружил, что могу использовать ajax, чтобы получить копию текущего файла на сервере, а затем заменить отредактированную часть позже.

я могу получить копию файла с помощью этого:

var url = window.location.pathname; 
    var filename = url.substring(url.lastIndexOf('/')+1); 

    $.ajax({ 
    url: filename, 
    async: false, // asynchronous request? (synchronous requests are discouraged...) 
    cache: false, // with this, you can force the browser to not make cache of the retrieved data 
    dataType: "text", // jQuery will infer this, but you can set explicitly 
    success: function(data, textStatus, jqXHR) { 
     origPage = data; // can be a global variable too... 
     // process the content... 
    } 
}); 

Который работает отлично и получает меня HTML я ожидал увидеть и при просмотре страницы в блокноте.

Следующий шаг - это то, что я не могу понять. Все, что я хочу сделать, это поменять в innerHTML из в DIV с идентификатором «редактора» с тем, что текущее значение, поэтому я попытался это:

origPage.getElementById('editor').innerHTML = e.html; 

Но я получаю ошибку «TypeError: не определено в а не функция ". Я должен делать что-то простое, что я чувствую, но я не знаю правильного форматирования, чтобы сделать это. Я попытался следующие варианты:

alert($(origPage).getElementById('editor').innerHTML); 
//Different attempt 
var newHtml = $.parseHTML(origPage); 
alert($(newHtml).getElementById('editor').innerHTML); 
//Different attempt 
alert($(origPage).html().getElementById('editor').innerHTML); 

Но я всегда получаю «Ошибка типа: не определено не является функцией» или «Ошибка типа: Не удается прочитать свойство„getElementById“неопределенных». Как я могу сделать это правильно?

EDIT:

Полная страница HTML ниже:

<!DOCTYPE html> 
 
<html> 
 

 
    <body> 
 
    <div id="editor"> 
 
     <h1>This is editable.</h1> 
 
     <p>Click me to start editing.</p> 
 
    </div> 
 
\t 
 

 
\t <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> 
 
    <script type="text/javascript" src="snapeditor.js"></script> 
 
    <script type="text/javascript"> 
 
     var editor = new SnapEditor.InPlace("editor", {onSave: function (e) { 
 
\t var isSuccess = true; 
 
\t //var origPage = e.html; 
 
\t var origPage; 
 
\t var url = window.location.pathname; 
 
\t var filename = url.substring(url.lastIndexOf('/')+1); 
 
\t // Actually perform the save and update isSuccess. 
 
\t 
 
\t // Javascript: 
 
\t $.ajax({ 
 
     url: filename, 
 
     async: false, // asynchronous request? (synchronous requests are discouraged...) 
 
     cache: false, // with this, you can force the browser to not make cache of the retrieved data 
 
     dataType: "text", // jQuery will infer this, but you can set explicitly 
 
     success: function(data, textStatus, jqXHR) { 
 
      origPage = data; // can be a global variable too... 
 
      // process the content... 
 
     } 
 
    }); 
 
\t //origPage shows expected html as this point 
 
\t 
 
\t //alert($(origPage).getElementById('editor').innerHTML); 
 
\t //alert($(origPage).html().getElementById('editor').innerHTML); 
 
\t $(origPage).getElementById('editor').innerHTML = e.html;//fails here 
 
\t alert(origPage); 
 
\t //alert(newHtml.getElementById('editor').innerHTML); 
 
\t \t $.ajax({ 
 
\t \t \t data: {html: origPage, docName: 'example1.html'}, 
 
\t \t \t url: 'savePage.php', 
 
\t \t \t method: 'POST', // or GET 
 
\t \t \t success: function(msg) { 
 
\t \t \t \t alert(msg); 
 
\t \t \t \t isSuccess = true; 
 
\t \t \t } 
 
\t \t }); 
 
\t return isSuccess || "Error"; 
 
\t }, 
 
\t 
 
\t onUnsavedChanges: function (e) { 
 
\t if(confirm("Save changes?")) { 
 
\t \t if(e.api.execAction("save")){ 
 
\t \t \t //location.reload(); 
 
\t \t } 
 
\t } else { 
 
\t \t e.api.execAction("discard"); 
 
\t } 
 
\t }}); 
 
    
 
    </script> 
 
    </body> 
 
</html>

+0

Помогло ли это? http://stackoverflow.com/questions/28700919/cannot-integrate-jquery-variable-into-rate.pdf/28701329#28701329 – gibberish

+0

Вы отправляете запрос AJAX на ту же страницу, на которой вы находитесь, что приведет к HTML-странице текущей страницы возвращается. Это условие ошибки и обычно нежелательно. Пожалуйста, покажите нам весь ваш код (HTML и jQuery/js), чтобы мы могли лучше помочь вам. – gibberish

+0

Хм, я не понимаю, как, но я могу что-то упустить? Я могу опубликовать новую информацию на моем php-скрипте просто отлично, что я не могу сделать, это получить текущую страницу как объект jquery, с которой я могу манипулировать innerHTML. – Bryan

ответ

0

кажется, что вы получите изменения пользователя в переменной - вы назвали вар e.html. Это не хорошее имя переменной, BTW. Если вы можете, измените его на что-то вроде htmlEdited

Вопрос: Если вы добавите команду alert(e.html);, что вы получите? Вы видите HTML после редактирования пользователем?

Если да, то вам нужно отправить эту переменную в файл PHP, который будет получать данные и вставлять их в базу данных.

код для отправки данных:

JavaScript/JQuery:

alert(e.html); //you should see the user-edited HTML 

$.ajax({ 
    type: 'post', 
    url: 'another_php_file.php', 
    data: 'userStuff=' + e.html, //var_name = var_contents 
    success: function(d){ 
     window.location.href = ''; //redisplay this page 
    } 
}); 

another_php_file.php:

<?php 
    $user_edits = $_POST['userStuff']; //note exact same name as data statement above 

    mysql_query("UPDATE `your_table_name` SET `your_col_name` = '$user_edits' ") or die(mysql_error()); 

    echo 'All donarino'; 

Javascript код AJAX будет отправлять содержимое Var в файл PHP под названием another_php_file.php.

Данные, полученные в $ user_edits, а затем вставляется в ваш MySQL БД

Наконец, я полагаю, что если вы повторно отобразить эту страницу он будет еще раз захватить содержимое #editor DIV из базы данных?

Здесь вы не указали достаточно информации и почему я хотел видеть весь ваш код.

Вы заполняете этот div из базы данных? Если нет, то как вы ожидаете, что страница будет обновлена ​​после обновления страницы?

Вам будет полезно выполнить некоторые уроки на phpacademy.org или в thenewboston.com. У этих двух (бесплатно) курсы, и вы будете экспертом:

https://phpacademy.org/videos/php-and-mysql-with-mysqli

https://phpacademy.org/videos/oop-loginregister-system


Если все, что вам нужно сделать, это вставить содержимое e.html заменить #editor ДИВ, то попробуйте следующее:

$('#editor').html(e.html); 

ОДНАКО, вам нужно событие, чтобы вызвать этот код. Можете ли вы это сделать?

alert(e.html); 

Если это так, тогда поставьте первый бит кода в том же месте. Если нет, нам нужна дополнительная информация о том, когда ваш код получает эту переменную, то есть вы помещаете оператор $('#editor').html(e.html);.

+0

e.html is Вернувшись из редактора, который я использую, я сам этого не назвал. Если я предупрежу об этом, я получу «

Я отредактировал это!

Я тоже отредактировал

" или что-то в этом роде. Я надеялся сохранить все это в одном файле, если мог. В конце дня все, что мне действительно нужно сделать, это взять содержимое html-страницы и изменить содержимое одного div. My origPage - это строка с " [...]" и мое содержимое e.html показано выше, если я могу просто вставить содержимое e.html, чтобы заменить #editor div, я бы будь счастлив. – Bryan

+0

Хорошо, сохраните переменную с этим именем. Это просто имя, как бы необычно. Но вы посмотрели сообщение о том, чтобы поставить AJAX на ту же страницу, что и HTML? http://stackoverflow.com/questions/17529509/values-not-updated-after-an-ajax-response/17530014#17530014 Я уверен, что это то, что вы делаете, но из вашего вышеуказанного комментария, Похоже, что это необходимо. Подробнее в следующем комментарии. – gibberish

+0

Если все, что вам нужно сделать, это *** вставить содержимое e.html, чтобы заменить #editor div ***, а затем увидеть новый раздел внизу моего ответа – gibberish

Смежные вопросы