Загрузка iframe с переменной $ _GET в src через AJAX - PullRequest
0 голосов
/ 27 сентября 2018

На моем сайте у меня есть список элементов и кнопка редактирования рядом с ними или опция для создания нового элемента.

Когда вы нажимаете edit, я делаю запрос через AJAX в другой файл PHP, который возвращаетформа редактирования, предварительно заполненная деталями элемента, который вы щелкнули для редактирования.

Если вы выберете опцию добавления нового элемента, он выполняет еще один AJAX-вызов в том же файле и возвращает форму без заполненной информации..

Тем не менее, часть формы представляет собой текстовый редактор WYSIWYG, созданный в виде фрейма:

HTML:

<iframe name='richTextField' id='wysiwyg'></iframe>

Сценарий:

richTextField.document.designMode = 'On';

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

Однако, когда я хочу отредактировать существующий элемент, я добавляюатрибут src для iframe, например:

src='myFile.php?id=$edit_id'

Исходный файл довольно прост, всего пара строк, но он использует переменную $_GET для идентификатора элемента, который вы пытаетесьредактировать.Он запрашивает БД для этого идентификатора и просто отображает содержимое следующим образом:

<?php
if (isset($_GET['id'])) {
    $ID = $_GET['id'];
    $params = [$ID];
    $sql = "SELECT * FROM tableWHERE id=?";
    $stmt = DB::run($sql,$params);
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
        $content = $row["content"];
    }
}
?>

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <?php echo $content; ?>
</body>
</html>

Это загружает нужный мне контент в iframe, как и ожидалось, но я не могу его редактировать.

ЯЯ уверен, что это как-то связано с тем, как я использую AJAX для загрузки файла, который получает что-то из другого файла с переменной $ _GET, но он загружает контент так, как я хочу, я просто не могу его редактировать.

Будем весьма благодарны за любые идеи или объяснения, почему это происходит, или любые предложения.

1 Ответ

0 голосов
/ 27 сентября 2018

Откуда вы звоните richTextField.document.designMode = 'On';?

Можете ли вы попробовать contentDocument для iframe?

document.getElementById('wysiwyg').contentDocument.designMode="on";

Редактировать: Редактирование, чтобы добавить рабочий код в ответ накомментарий как код не отформатирован в комментарии.

Как видите, изначально iframe недоступен для редактирования.После события нажатия кнопки, iframe является редактируемым, потому что designMode установлен на 'on';

`

<html>
    <head></head>
    <body>
        <iframe name='richTextField' id='wysiwyg'></iframe>
        <div id="div">
            Div Content
        </div>
        <button id="testbutton">Test Button</button>
        <script
  src="https://code.jquery.com/jquery-3.3.1.min.js"
  integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
  crossorigin="anonymous"></script>
        <script>
            $('#testbutton').click(function(){
                var xmlhttp = new XMLHttpRequest(); 
                xmlhttp.onreadystatechange = function(){ 
                    if(this.readyState == 4 && this.status == 200){ 
                        $("#div").html(this.responseText); 
                        $("#div").slideDown("slow"); 
                        enableEditMode(); 
                    } 
                }; 
                var id = 51;
                xmlhttp.open("POST", "test.php?id="+id, true); 
                xmlhttp.send(); 
            });
            function enableEditMode (){ 
                richTextField.document.designMode = 'On'; 
            }
        </script>
    </body>
</html>

`

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