У меня возникла проблема с сохранением активности подразделения после отправки формы с помощью AJAX. Мой сценарий заключается в том, что у меня есть панель поиска, которая может принимать несколько типов ввода (имя, идентификатор, категория и т. д.). Затем у меня есть панель фильтров, которая в основном представляет собой расширенный поиск, она практически делает то же самое, но имеет больше параметров, таких как отдельные поля для имени, идентификатора, категории, ценового диапазона и т. д. это некоторые важные термины,
Меня не волнует CSS, но дело в том, что любой, кто использует эту страницу на стороне клиента, должен видеть значения, вставленные в раскрывающийся список фильтра, т.е. держать раскрывающийся список фильтра видимым даже при перезагрузке страницы. После отправки формы вся моя страница перезагружается. Это делает раскрывающийся список снова скрытым. Я плохо разбираюсь в AJAX, поэтому не знаю, как это сделать, буду признателен за любую помощь.
Это рабочая рабочий пример (не обращайте внимания на отсутствие CSS, так как все в основном определяется в другом файле на основе подхода MVC) — Fiddle Эта рабочий пример также не поддерживает сохранение активного разделения после отправки формы, поэтому я пытаюсь переключиться на AJAX.
Это мой подход AJAX, но он продолжает отображать пустое место вместо таблицы и ее данных.
$("#searchButton").click(function() {
var params = {
searchKeyword: $("#searchKeyword").val()
};
var form = $("#searchArea");
var url = form.attr("action")+"?"+$.param(params);
$.ajax({
url: url,
type: "POST",
dataType: "json",
colModel:[
{label:'ProductID', name:'ITM_CD',classes:'ITM_CD', width:40, align:"center", sorttype:"int"},
{label:'Name', name:'ITM_NM',classes:'ITM_NM',width:100, align:"center", sorttype:"int"},
{label:'Alt.name', name:'ITM_ALT_NM2',classes:'ITM_ALT_NM2', width:100, align:"center", sorttype:"string"},
{label:'Special code', name:'SPL_CD',classes:'SPL_CD', width:50, align:"center", sorttype:"int"},
{label:'Sort Order', name:'SORDER',classes:'SORDER', width:40, align:"center", sorttype:"int"},
{label:'Talent Points', name:'TPOINTS',classes:'TPOINTS', width:40, align:"center", sorttype:"int"},
{label:'Selling price', name:'SPRICE',classes:'SPRICE', width:30, align:"right", sorttype:"string"},
{label:'Cost price', name:'CPRICE',classes:'CPRICE', width:30, align:"right", sorttype:"string"},
{label: 'Category Name', name:'CNAME', classes: 'CNAME', width: 30, align: "right", sorttype:"string"},
{label: 'Group name', name:'GNAME', classes: 'GNAME', width: 30, align: "right", sorttype:"string"}
],
});
});
$("#searchButton").click(function() {
var params = {
searchKeyword: $("#searchKeyword").val(),
IDKeyword: $("#IDKeyword").val(),
NMKeyword: $("#NMKeyword").val(),
NM2Keyword: $("#NM2Keyword").val(),
SCKeyword: $("#SCKeyword").val(),
costStartKeyword: $("#costStartKeyword").val(),
costEndKeyword: $("#costEndKeyword").val(),
sellStartKeyword: $("#sellStartKeyword").val(),
sellEndKeyword: $("#sellEndKeyword").val(),
cnameKeyword: $("#cnameKeyword").val(),
gnameKeyword: $("#gnameKeyword").val()
};
var form = $("#dropDownFilter");
var url = form.attr("action")+"?"+$.param(params);
$.ajax({
url: url,
type: "POST",
dataType: "json",
colModel:[
{label:'ProductID', name:'ITM_CD',classes:'ITM_CD', width:40, align:"center", sorttype:"int"},
{label:'Name', name:'ITM_NM',classes:'ITM_NM',width:100, align:"center", sorttype:"int"},
{label:'Alt.name', name:'ITM_ALT_NM2',classes:'ITM_ALT_NM2', width:100, align:"center", sorttype:"string"},
{label:'Special code', name:'SPL_CD',classes:'SPL_CD', width:50, align:"center", sorttype:"int"},
{label:'Sort Order', name:'SORDER',classes:'SORDER', width:40, align:"center", sorttype:"int"},
{label:'Talent Points', name:'TPOINTS',classes:'TPOINTS', width:40, align:"center", sorttype:"int"},
{label:'Selling price', name:'SPRICE',classes:'SPRICE', width:30, align:"right", sorttype:"string"},
{label:'Cost price', name:'CPRICE',classes:'CPRICE', width:30, align:"right", sorttype:"string"},
{label: 'Category Name', name:'CNAME', classes: 'CNAME', width: 30, align: "right", sorttype:"string"},
{label: 'Group name', name:'GNAME', classes: 'GNAME', width: 30, align: "right", sorttype:"string"}
],
});
});
});
HTML и CSS такие же, как у Fiddle.
$("#filterSearchButton").on("click", function(){
localStorage.setItem("style", $("#dropDownFilter").css("display", "none"));
});
if (localStorage.getItem("style") === null) {
localStorage.setItem("style", $("#dropDownFilter").css("display", "flex"));
} else {
$("#dropDownFilter").css("display", "flex");
}
});
Проблема: раскрывающийся список отображается и при первой перезагрузке, этого следует избегать.
Он сохранит ваш последний ответ ajax.
Я не совсем уверен, как использовать локальное хранилище или хранилище сеансов, не могли бы вы поделиться блоком кода? Между тем, я попробую то, что вы сказали.
У вас есть какая-либо переменная, которую вы хотите показать после вызова ajax. и тоже нужно использовать эту переменную после перезагрузки страницы?
Эй, я попробовал подход localStorage, он работает до некоторой степени. Выпадающий список виден, но я хочу, чтобы он был скрыт при первом открытии страницы, по умолчанию он не остается скрытым при первой перезагрузке.
Я добавил код для локального хранилища в качестве редактирования самого вопроса.
У меня есть весь jqGrid для отображения после вызова ajax, но он автоматический, и нет другой переменной, которую я должен показать.
Вы можете использовать localstorage setItem и getItem для хранения последнего ответа ajax.
window.localStorage.setItem("variable", variable);
var getItem = window.localStorage.getItem("variable");
также, когда вы хотите удалить setItem, вы также можете удалить его.
window.localStorage.removeItem('variable');
Можно ли каким-либо образом удалить элемент при первой загрузке страницы?
Когда ваш проект будет запущен, getitem не будет иметь назначенного значения. после вызова ajax он установит значение в localstorage. поэтому вам просто нужно удалить элемент из локального хранилища, когда вы выполняете какой-либо другой вызов ajax или когда вы возвращаетесь на домашнюю страницу.
В моем редактировании 1 я добавил условие, при котором, если разделение не отображается, то есть «отображать: нет», то не показывать стиль разделения, хранящийся в localStorage. Это должно запретить localStorage обрабатывать его содержимое. Если отображается деление, то оно будет отображаться. Это скорее дешевый трюк, если клиенты хотят использовать поиск на основе фильтров, им придется открыть панель фильтров, что означает, что отображение обновляется до гибкого. Это позволит localStorage показать его снова. Но ведет себя не так, как должно. он показывает деление, хотя это первая перезагрузка.
Кроме того, я использую jqGrid без AJAX, потому что я обнаружил, что параметры и ограничения не были определены в формате AJAX, а их переделка займет много времени.
Я также обновил код в файле скрипки, пожалуйста, проверьте.
Как упомянул @bhavik, я попробовал подход с использованием localStorage, и он сработал, чтобы сделать то же самое, избегая открытия разделения при перезагрузке страницы, я просто изменил способ отправки формы. вместо оператора if я просто сказал:
$(document).on("click", "#report tr", function(){
parent.onSearched($("#report").getRowData($(this).attr("value")));
});
Можете попробовать setitem и получить элемент window.localStorage.setItem("PortalLoginApp.userName", username); var userName = window.localStorage.getItem("PortalLoginApp.userName");