#javascript #jquery #html #ajax #pug
#javascript #jquery #HTML #ajax #pug
Вопрос:
Вот моя проблема, у меня есть страница с именем page1 (у меня есть кнопка на этой странице для доступа к другой странице с именем page2). Я хочу изменить содержимое определенного селектора на странице 2 с помощью события щелчка по кнопке на странице 1. Вот мой код для страницы 1 в pug
form#abandonForm(name='btn' action='page2')
button#abandonBtn.button Abandonner
Вот мой код для страницы 2 в pug
section#termineExam
и вот мой файл .js
$( document ).ready(function() {
var $abandonBtn = $('#abandonBtn');
$abandonBtn.click(function(){
$.get('page2', null, function(data){
var $data = $(data);
console.log(data);
console.log($data.find('#termineExam').html());
$data.find('#termineExam').text("section changed");
console.log($data.find('#termineExam').html()); // print the changes
console.log(data); // print the same data without changes on the section
})
});
});
Я не понимаю, почему изменения применяются к DOM, но не к самой странице2.
Спасибо за помощь и извините за мой английский!
Комментарии:
1. Что именно вы подразумеваете под «но не на самой странице2»? Вы ожидаете, что изменения, которые вы вносите на клиенте, будут фактически сохранены
page2
на сервере?2. Я имею в виду, что я не вижу изменений на странице 2, когда я запускаю код.
Ответ №1:
Вы, кажется, неправильно понимаете, как jQuery.get()
это работает.
Из документов:
jQuery.get( url [, data ] [, success ] [, тип данных ] )
Возвращает: jqXHR
Описание: Загрузка данных с сервера с помощью HTTP-запроса GET.
По сути, вы получаете содержимое из ‘page2’ в виде строки и сохраняете его в переменной с именем data
. Это улица с односторонним движением. При вызове $data.find('#termineExam').text("section changed");
вы изменяете локальную переменную, а не фактический файл page2
Когда вы переходите к page2
, вы запрашиваете совершенно новую копию page2
файла без каких-либо изменений, которые вы применили к этой строке на странице 1.
Если вы хотите фактически изменить содержимое page2
, вам понадобится какой-то серверный скрипт (например, php), который принимает новые данные со страницы 1 и обновляет файл страницы 2.
В качестве альтернативы, если вы просто хотите отправить некоторые данные на страницу 2 и отобразить эти данные при загрузке этой страницы, есть много способов сделать это.
Одним из вариантов было бы использовать localstorage
:
Создайте файл, вызываемый storage.js
с указанным ниже содержимым, и включите этот файл в оба page1
и page2
/**
* Feature detect local reference for simple use of local storage
* if (storage) {
* storage.setItem('key', 'value');
* storage.getItem('key');
* }
*
*/
var storage;
var fail;
var uid;
try {
uid = new Date;
(storage = window.localStorage).setItem(uid, uid);
fail = storage.getItem(uid) != uid;
storage.removeItem(uid);
fail amp;amp; (storage = false);
} catch (exception) {}
/* end Feature detect local reference */
В page1
этом:
$(document).ready(function() {
var $abandonBtn = $('#abandonBtn');
$abandonBtn.click(function() {
if(storage){
storage.setItem('termineExam', 'section changed');
}
});
});
Затем в page2
сделайте это:
$(document).ready(function() {
if(storage){
var text = storage.getItem('termineExam');
if(text) $('#termineExam').text(text);
}
});
Комментарии:
1. Это не решает мою проблему.. Я хочу иметь возможность перейти на страницу 2.