Как передать содержимое текстовой области TinyMCE в файл PHP напрямую, а не отправлять через AJAX? - PullRequest
0 голосов
/ 03 января 2019

Я создаю простую веб-страницу с встроенным TinyMCE.

Часть HTML:

<form method="post" action="dump.php">
<div id="main">
<div id="container_left">
        <textarea id="mytextarea"></textarea>
        <input id="submit" type="submit" value="submit">            
</div>
<div id="show_right"></div>
</div>
</form>

Часть JavaScript.

<script src="tinymce/tinymce.min.js"></script>
<script type="text/javascript">
tinymce.init({
    selector: "textarea",
    height: 250,
    plugins: [
        "code advlist autolink lists link image charmap print preview anchor",
        "searchreplace visualblocks code fullscreen",
        "insertdatetime media table contextmenu paste"
    ],
    toolbar: "code insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
    setup: function (editor) {
        editor.on('init keydown change', function (e) {
           document.getElementById('show_right').innerText = editor.getContent();
        });
    }
});
</script>

Теперь я хочу напечатать содержимоев редакторе TinyMCE после нажатия кнопки submit.

Файл dump.php

<?php
    print_r($_POST);
?>

Почему ничего не печатается с помощью dump.php?
Я могу отправить информацию наdump.php с помощью метода AJAX.
1.Удалите <form method="post" action="dump.php"></form> в html-части.
2.Добавьте следующий js-код в часть JavaScript.

<script>
function send(){
    var data = tinyMCE.get('mytextarea').getContent();
    var ajax = new XMLHttpRequest();
    ajax.open('POST','dump.php',false);
    ajax.setRequestHeader('Content-type','application/x-www-form-urlencoded');
    ajax.send('data='+data);    
} 
ob = document.getElementById("submit");
ob.addEventListener("click",send);
</script>

Я пытался передать ему содержимое, которое я набираю в textarea, чей id равен mytextarea в dump.php и dump.php может правильно распечатать массив.

Моя проблема заключается в том, как передать содержимое TinyMCE textarea в файл PHP напрямую, а не отправлять его через AJAX?Делай работу без AJAX.

Ответы [ 3 ]

0 голосов
/ 06 января 2019

Да, вы можете отправить его без AJAX со скрытым iframe, который имеет в качестве target атрибута значение name из iframe. Исходная страница не будет перезагружена. Ответ с вашего сервера будет загружен в скрытом iframe. В этом случае вы должны установить iframe display на none.

<iframe name="server_answer" style="display:none"></iframe>
<form method="post" action="dump.php" target="server_answer">
    <div id="main">
    <div id="container_left">
        <textarea id="mytextarea" name="mytext"></textarea>
        <input id="submit" type="submit" value="submit">            
    </div>
    <div id="show_right"></div>
    </div>
</form>

Для вашего textarea вы также должны написать некоторый name в качестве атрибута, например, как name="mytext", потому что на стороне сервера вы хотите получить текст, который будет отправлен. И поскольку вы не написали это name, вы не можете его получить. В своем решении AJAX вы делаете это с ajax.send('data='+data);. В этом случае data похоже на имя вашего textarea.

Для вашего скрипта PHP:

print($_POST["mytext"]); //mytext is name of textarea

Альтернативное решение

Вы также можете отобразить форму отправки как отдельную страницу внутри iframe, и когда она будет отправлена, внешняя страница не перезагрузится. Это решение также не использует AJAX.

0 голосов
/ 13 января 2019

Вам не нужен iframe, просто добавьте его в конфигурацию tinymce, чтобы сохранить синхронизацию оригинальной текстовой области с редактором

tinymce.init({
selector: '#mytextarea',
setup: function (editor) {
    editor.on('change', function () {
        editor.save();
    });
}
});

Быстрый и грязный документ

<code><!DOCTYPE html>
<html>
<head>
  <script src='https://cloud.tinymce.com/stable/tinymce.min.js'></script>
  <script>
  tinymce.init({
    selector: '#mytextarea',
    setup: function (editor) {
        editor.on('change', function () {
            editor.save();
        });
    }
  });
  </script>
</head>

<body>
<?php if ('POST' === $_SERVER['REQUEST_METHOD']): ?>
  <pre><?php print_r($_POST) ?>
Название <? Php endif;?>
0 голосов
/ 03 января 2019

Во-первых, вы должны назвать текстовое поле. И "dump.php":

<? PHP </p>

print_r ($ _POST [" name_of_textarea "]);

?>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...