Я реализую приложение с Хкери Мобиле и мое сомнение - следующее.
У меня есть весь html, который требуется, чтобы отображать приложение в одном index.html, когда пользователь работает с каким-то элементом doom, загружается часть контента index.html и другая часть dinámicamente, обработав ответ сервера с данными, которых хочет отобразить пользователь. До сих пор совсем правильный, проблема приходит, когда ты находишься на "экране", который исходит из нее, произвелась dinámicamente и ты освежаешь страницу, очевидно загружается статическая часть страницы и теряется вся динамическая часть, которая произвелась.
Конкретный пример: Когда пользователь loguea с Вашим счетом и хочется видеть Ваш профиль, загружает статический вид HTML, который содержит различные inputs, которые в зависимости от пользователя, который есться logueado, будет содержать информация или другая, если, загрузив страницу Вашими данными, вышеупомянутая страница освежится, исчезает весь динамический контент той же самой и остается вся статическая часть HTML, с пустыми inputs.
Я хотел бы знать, есть ли какое-то легкое решение, для того, чтобы, перезагрузив страницу, было возможно продолжать отображать весь контент, уже будьте статическим или динамическим.
Код:
// Mi perfil público
$("#myprofile").on("click", function(){
//comprobamos que el usuario esta logueado
if (localStorage.rnl01user && localStorage.rnl01password) {
//spinner de cargado
$.mobile.loading("show");
//creamos petición XML con valores necesarios
var getprofile = getLoginRequest(localStorage.rnl01user, localStorage.rnl01password);
//petición AJAX al servidor con el código XML generado
callWebServiceAsync(URL_API_KERNEL, getprofile, successGetProfile);
//Reiniciamos los valores
$("#ProfileImg").html("");
$("#ProfileCountry").html("");
$("#ProfileTown").html("");
$("#ProfileEvents").html("");
$("#ProfileDescriptionTitle").html("");
$("#ProfileDescriptionText").html("");
$("#ProfileEmail").html("");
$("#editProfilePass").text("Cambiar Contraseña");
$("#editProfilePass").attr("data-pass", localStorage.rnl01password);
$("#editProfileCity").text("Privado");
$("#ProfileEventsIns").html("");
$("#ProfileOrgGest").html("");
}else{
$.mobile.changePage("#nologinMsg");
}
// Función que se encarga de procesar el XML devuelto por el servidor, donde se encuentran todos los datos
function successGetProfile(data, textStatus, jqXHR) {
//creamos variables
var name="",email="",surName="",country="",region="",description="",image="",events="";
//si devuelve valores los guardamos
if ($(data).find("LoginRequestResult")) {
var name = $(data).find('Name').text();
var email = $(data).find('Email').text();
var surName = $(data).find('Surname').text();
var country = $(data).find('Country').text();
var region = $(data).find('Region').text();
var description = $(data).find('Description').text();
var image = $(data).find('Image').text();
var events = parseInt($(data).find('ActiveEvents').text()) + parseInt($(data).find('ClosedEvents').text());
var cityCode=$(data).find("CityCode").text();
var phone=$(data).find("PhoneNumber").text();
var city=$(data).find("City").text();
var inscribedevents=$(data).find("InscribedEvents").text();
var orgestion=$(data).find("ManagedOrganizations").text();
//si el usuario tiene imagen si pinta la imagen y el nombre, sino se pinta solo el nombre
if (image!=""){
$("#ProfileImg").html('
'+ name+'
');
}else{
$("#ProfileImg").html(''+ name+'
')
}
//pintamos los valores obtenidos en los campos del html
$("#ProfileCountry").html(country);
$("#ProfileTown").html(region);
$("#ProfileEvents").html(events);
$("#ProfileDescriptionTitle").html("Presentacion de "+name);
$("#ProfileDescriptionText").html(description);
$("#ProfileEmail").html(email);
//ponemos atributo codigo de la ciudad
if (cityCode!=""){
$("#editProfileCity").attr("city-code",cityCode);
}else{
$("#editProfileCity").attr("city-code","791000");
}
//pintamos los valores obtenidos en los campos
$("#profileDescription").val(description);
$("#profilePhone").val(phone);
$("#ProfilePhone").html(phone);
//pintamos el nombre de la ciudad
if (city!=""){
$("#editProfileCity").text(city);
}
$("#ProfileEventsIns").html(inscribedevents);
$("#ProfileOrgGest").html(orgestion);
}
//Cambiamos a la página que contiene los datos del perfil del usuario
$.mobile.changePage("#mypublicprofile");
//quitamos el spinner de carga
$.mobile.loading("hide");
}
});
Добро, я объясняю вам код сверху для того, чтобы он был проще для всех:
Первое, что мы делаем, состоит в том, чтобы подтверждать, что пользователь - logueado, того, чтобы не быть таким, он пересылается в страницу, которой единственное, что он делает, состоит в том, чтобы сообщать, что, чтобы видеть контент страницы, он должен быть loqueado, с кнопкой, которую он выпускает login.
Если пользователь - loqueado, поверьте XML, который будет послан в сервер посредством просьбы AJAX, вышеупомянутый XML производится с функцией getLoginRequest и параметры, которые мы переместили его.
Как только произвелся XML, он сохраняет в переменной в этом случае var getprofile, который будет содержать XML. После мы перемещаем эту переменную как параметр в функцию callWebServiceAsync, что берется за то, чтобы делать себе призыв к серверу посредством AJAX с XML, который произвелся. Ниже мы возобновляем стоимость всех элементов HTML, если уже они содержали какой-либо.
Когда сервер отвечает нам со статусом 200, он идет в функцию, которую мы показали ему, в этом случае successGetProfile. Которая подбирает всю информацию, которая возвратила нам сервер и обрабатывает ее.
То, что делает эту функцию, просто состоит в том, чтобы искать всю стоимость, что мы нуждаемся в том, чтобы покрасить в HTML, как имени, город, провинция, и т.д.
Изображения:
Dinamicamente, не освежая ничего абсолютно.
Всякий раз когда они делают событие "и этот производит динамический контент", ты можешь изменять унифицированный указатель ресурса также как и он это делает facebook во время открытия фотографии (унифицированный указатель ресурса меняется и фотография появляется, но никогда не загружено / перезагружать окно.)
Пример, у меня есть следующий унифицированный указатель ресурса
httx:////projectwatchfree.tv / tv-listings /
var current_url = (window.location.href).split('page');
current_url = (current_url[0]).split('?');
var pagex = 3;
var url_letter = 'd';
window.history.pushState("", "", current_url[0]+"page/"+pagex+"/letter/"+url_letter);
линия 1 извлекает унифицированный указатель ресурса и обрезает ее с "page"
линия 2 извлекает первый результат предыдущего и это отрезает где haiga один"?"
Наш url остался бы равным
Линия 3 добавляет, что automaticamente/dinamicamente/ó он меняет унифицированный указатель ресурса, и не перезагружая окна.
Тогда с этим примером мой унифицированный указатель ресурса остается таким
httx:////projectwatchfree.tv/tv-listings/page/3/letter/d
и лучшее состоит в том, что, если пользователь copea и это затруднение унифицированный указатель ресурса, вновь дает целое число, он обновляет.
Мои параметры даже сохраняются, я читаю их и показываю динамические результаты, которые он показал ранее (они не теряются).
Привет.
Ты мог бы использовать localStorage
(Документация), чтобы сохранять стоимость, в которой ты нуждаешься.
Чтобы сохранять их, он создает событие onblur
, ontextchanged
или то, в чем ты нуждаешься, и сохраняй стоимость:
function campo1modificado() {
var valor = document.getElementById("campo1").value;
localStorage['campo1'] = valor;
}
И добавь этот код в document ready
для того, чтобы каждый раз, когда была загружена страница он подтвердил, сохранял ли ты стоимость.
$(document).ready(function() {
var campo1= localStorage['campo1'];
if (campo1.lenght > 0) {
// guarda dónde queires este campo
document.getElementById("campo1").value = campo1;
}
}
EDIT: Если он предпочитает уходить в главную страницу и queires возобновлять элементы в javascript использует эту функцию в document ready
:
$(document).ready(function() {
window.location.reload(false); //firefox
window.location = self.location; //chrome
window.location.href = window.location.href //IE
}
в конце концов мне казаться нереальным сохранять все переменные в localStorage, так как помимо переменных, когда производится событие, делаются много других вещей помимо подбирания данных, с которым он был бы должен воссоздавать весь процесс снова, так что я решил, что посылать это login, когда пользователь делал refresh страницы предупреждая его сначала о том, что информация могли бы терять.... этот метод, я функционировало хорошо в Chrome, Он действует и Firefox, но не в IE и Safari, эти последние два браузера не позволяют изменить страницу до того, как он освежил страницу, которое я оставлял себе в тех же самых, так что в HTML я поместил рукописный шрифт для того, чтобы я redireccionara в случае, если документ пробовал перезагрузить одной унифицированный указатель ресурса отличная от той login. С этим я упорядочил несовместимость этих двух браузеров относительно другие. Приветствие