Заменить содержимое iframe после обработки данных с помощью jQuery - PullRequest
1 голос
/ 13 февраля 2012

У меня есть следующая функция для получения шаблона HTML с сервера и замены некоторых тегов

$.ajax({
    url: "/newsletter/preview/1",
    data: {},
    success: function(data) {
        var template = data;
        var layer = $("<iframe>").attr({ "id": "preview_frame" });
        $("#newsletter .element input, #newsletter .element textarea").each(function() {
            var id = "\\$\\$"+$(this).parent().parent().attr("id").replace(/^newsletter_/, "")+"\\$\\$";
            template = template.replace(new RegExp(id, "g"), htmlspecialchars($(this).val(),2));
        });
        $("body").prepend(layer);
    },
    dataType: "html"
});

Получение шаблона работает нормально.Также замена тегов содержимым формы (при размещении alert(escape(template)); внутри цикла each показывает, что все теги заменяются).Но есть еще две нерешенные проблемы:

  • Я не нашел способа установить содержимое переменной template в iframe ($("#preview_frame").contents().find("body").html(template); приводит только к пустому фрейму)

  • Предварительное добавление iframe (переменная layer) к телу HTML происходит во время итерации по полям формы, но это необходимо сделать после (!) Замены всех тегов, чтобы толькозавершенный обработанный шаблон будет помещен в iframe.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2012

Я сейчас использую плагин формы для jQuery от http://malsup.com/jquery/form/. Поэтому я отправляю форму через Ajax на сервер, который генерирует временный файл, который включается через iframe после успешной отправки формы.

0 голосов
/ 13 февраля 2012

динамически добавьте ifame, источником которого является ваш URL-адрес вызова ajax, и выполняйте javascript во время загрузки вашей страницы iframe.

$("<iframe/>").attr({
   source: "/newsletter/preview/1",
   id: "preview_frame"
}).appendTo($("body"));
...