Получить переменную и фрагмент страницы с помощью функции Jquery .load()

В настоящее время я использую функцию.load() Jquery для асинхронной вставки фрагмента страницы. В URL-адресе, с которого я загружаю фрагмент страницы, я также установил значение глобальной переменной Javascript (в теге script).

var loaded_variable = 'value1'

Есть ли способ, которым я могу использовать функцию.load(), чтобы вставить фрагмент страницы и получить значение loaded_variableчто-то вроде следующего кода:

    function loadProducts(url) {
                 $('#mainplace').load(url + ' #submain', function() { 
                       current_variable = loaded_variable;
                 });
    }

Мне известно, что блоки сценариев используются, когда к URL-адресу добавляется выражение селектора, поэтому, если функция.load() не работает, я открыт для других функций Jquery, которые могут выполнить это.

Дополнительная информация: URL, с которого я загружаюсь, написан на HTML и Python (Web2py); одни и те же переменные Python используются для визуализации фрагмента страницы и установки loaded_variable значение.

2 ответа

Решение

Если вы хотите извлечь фрагмент страницы и выполнить на нем скрипт, вам понадобится другой подход. Это немного глупо, но работает.

$.ajax({url: 'fetch_page.html', dataType: 'text'}).done(function(html) {
    var dom = $('<html />').prop('innerHTML', html);
    $('body').append(dom.find('body p'));
    $('head').append(dom.find('script'));
});

Это приносит p тег из наших выбранных страниц и вставляет его в body родительской страницы. Он также выполняет любые скрипты на выбранной странице.

Если вам интересно о prop('innerHTML... немного, это потому, что если бы я использовал JQuery .html() метод, он очищает входную строку и поэтому мы не получаем желаемого результата.

Моей первой мыслью был фрагмент документа, но вы не можете вставить строку HTML в фрагмент документа - вы должны добавить методы DOM. Даже тогда в этом случае это не будет действительно предлагать экономию по сравнению с простым использованием элемента для синтаксического анализа dom (dom) как у меня.

Немного хакерский, как я уже сказал, но работает.

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

Я создал эту страницу с помощью формы url /blog-newsletter-form, которая включает некоторый код из электронной почты CRM.

Затем я добавил div с классом «blog-newsletter-form» в конце своих сообщений в блоге и поместил следующее в заголовок страницы, чтобы загрузить содержимое из раздела первой страницы в сообщения моего блога.

      $( document ).ready(function() {
  $('.blog-newsletter-form').load("/blog-newsletter-signup #page .page-section:nth-of-type(1) .content");
});

Это сработало отлично, за исключением того, что функция загрузки удаляет скрипт со страницы информационного бюллетеня, который необходим для работы моей формы информационного бюллетеня.

Как загрузить фрагмент страницы, а также сохранить сценарий для информационного бюллетеня. Я попытался использовать приведенный выше пример кода, но не смог заставить его работать.

Другие вопросы по тегам