Получить переменную и фрагмент страницы с помощью функции 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");
});
Это сработало отлично, за исключением того, что функция загрузки удаляет скрипт со страницы информационного бюллетеня, который необходим для работы моей формы информационного бюллетеня.
Как загрузить фрагмент страницы, а также сохранить сценарий для информационного бюллетеня. Я попытался использовать приведенный выше пример кода, но не смог заставить его работать.