【问题标题】:How to store/remember the data fetched from ajax call?如何存储/记住从 ajax 调用中获取的数据?
【发布时间】:2014-08-11 09:24:35
【问题描述】:

我将一些数据检索到 JSON 数组中,然后将其显示到 HTML 表中,其中包含一些包含在超链接中的数据。即几个列的数据是可点击的,一旦点击它就会显示另一个 JSP 页面(比如第 2 页),其中包含更多保存在 JSON 数组本身的数据。

现在此页面 2 具有“返回”按钮功能 - 预期行为是当用户单击“返回”按钮时,它应该返回到显示 HTML 表格数据的页面 1,并且用户应该能够看到数据他们也是第一次拿到的。即,应该有某种方法来记住从我的初始 AJAX 请求中获取的数据,并检索用户从子页面#2 返回该页面时在页面 1 中获取的相同数据。

当用户输入帐户#和帐户类型时触发 AJAX 调用 - 我相应地获取数据并在“响应”对象中获取结果并将其整齐地显示在 html 表上,但在用户从该页面移动后再次点击后退按钮,我看到没有表格的第 1 页。现在我不能再要求用户重新输入详细信息以查看他们之前检索到的数据。这很烦人。

请给我一个解决这个问题的方法。谢谢大家。

感谢您花时间阅读本文。

这是部分代码:

$(document).ready(function () {
    var flag = "1";

    $('#accountType').bind('change', function (event) {

        var accountType = $('#accountTypeSelect').val();
        var account = $('#accountText').val();

        jQuery.ajax({
            type: 'POST',
            url: '${pageContext.request.contextPath}' + "/Page1.spr", //request page
            cache: false,
            dataType: "json",
            data: {
                "accountType": accountType,
                "account": account,
                "flag": flag
            }, //data sent to request page    
            success: function (response) {
                // code to display the data into the html table
            },

            error: (function (message) {
                console.log("error message : " + message);
            }),

            statusCode: {
                404: function () {
                    alert("page not found");
                }
            }
        });
    });

【问题讨论】:

  • @neshpro9 存储响应如何与获取响应重复......?

标签: javascript jquery ajax json jsp


【解决方案1】:

您可以使用setItem方法将数据保存在HTML5sessionStoragelocalStorage中,如下所示:

success: function(response) {
     sessionStorage.setItem("result", response)
     // code to display the data into the html table
}

稍后使用getItem()访问它,当您回到页面时喜欢

var prevResponse = JSON.parse(sessionStorage.getItem("result"));
if(prevResponse)
  {
    // code to be executed when old dats is found
  }
else{

}

理想情况下,您在第一页加载中的代码将类似于

var prevResponse = JSON.parse(sessionStorage.getItem("result"));
if(prevResponse)
{
    // data exists : code to be executed when old dats is found
}
else{
  jQuery.ajax({}) // send the AJAX request to fetch data
}

您可以阅读有关会话和本地存储的更多信息here

Browser support 用于网络存储 API。

更新

如果您没有 HTML5 支持,您可以使用 jQuery cookie 插件(还有很多其他插件)在客户端存储数据。

您可以将数据存储到 cookie 中,如下所示:

$.cookie("result", response);

然后从cookie中获取它:

$.cookie("result");

【讨论】:

  • 您的回答纯粹是关于 html5 。请适当地帮助用户,因为它在 jsp 下被标记。为什么你可以在 jsp 中发布关于会话的信息
  • @SanKrish 我更新了提到html5 的答案。直到现在我才注意到jsp 标签。 jsp 不支持 html5 doctype 吗?我是一个前端开发人员,我根据我所知道的回答。我怎么能/为什么要发布我不太熟悉的东西?如果您认为更合适,请随意添加另一个答案。
  • 这与回答无关,如果用户在html 下标记它可能更合适,正如您所解释的那样。由于它是在 jsp 标签下,他可能期待更多的服务器端的东西。所以你的回答可能会误导。但我不太确定,直到我们从提问者那里听到它
  • @SanKrish 您没有回答我的问题:jsp 不支持 html5 文档类型吗? “他可能在期待” 你现在在做假设。据我所知,我的回答是完成工作的一种方法。你为什么讨厌它?它究竟是如何误导的?如果是,那么请引导 OP 朝着正确的方向前进,说明为什么这是误导性的,而不是浪费您的时间发表评论。
  • jsp 不支持 html5 doctype 吗? html5 依赖于浏览器,当然 jsp 支持它
【解决方案2】:

您也许可以通过 jquery 使用 cookie。但用户必须启用浏览器的 cookie。它通常默认启用。

添加:

$.cookie("key1", data1);
$.cookie("key2", data2);

阅读:

$.cookie("key1");

删除:

$.removeCookie("key1");

所以,你可以尝试读取cookie来加载表数据,如果没有数据,调用ajax:)

【讨论】:

    【解决方案3】:

    另一种方法是将其保存在隐藏的输入中:

    success: function(response){
          $("#hiddenInput").val(JSON.stringify(response));
    }
    

    【讨论】:

    • 是的,因为页面浏览量持续存在..:P
    • 在这种情况下,你是对的,但是如果他已经在使用JQuery,他也可能使用JQuery modal。
    • jquery modal 如何帮助他在输入类型中保存数据=通过返回按钮隐藏在浏览量中?
    • 如果他使用jquery modal,他不需要后退按钮,而是一个关闭按钮。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2011-01-07
    • 2018-07-14
    • 2014-10-04
    • 1970-01-01
    • 2019-09-06
    • 2019-04-06
    相关资源
    最近更新 更多