【问题标题】:Using localstorage inside Jquery done method在 Jquery done 方法中使用 localstorage
【发布时间】:2018-04-15 23:19:19
【问题描述】:

当用户的回答正确时,我想在 .done 方法中设置一个本地存储。然后我想get 那个本地存储对象并在done 方法之外使用它。这怎么可能?以下是我正在尝试但没有成功的方法。

data.color 是一个字符串

$.ajax({
    type: "POST",
    url: "validation.php",
    dataType: "json",
    data: $("input").serialize(),
}).done(function(data) {
 if (data.answer) { //if answer is correct
 localStorage.setItem("ColorStorage", data.color); //set a local storage with the variable data.color
    }
});

//outside of ajax
if (localStorage.getItem("ColorStorage") > 1)
    $("#result").append(localStorage.getItem("ColorStorage"));

【问题讨论】:

  • 你哪里出了问题?设置还是获取?要检查它,您可以将debugger;s 放在您的设置之前并获取并调试它吗?
  • 可以在窗口中的任何位置获取 locaStorage 的值,因为它是窗口本身的一个对象,即使在关闭浏览器后也会保留您的数据。
  • data.color 是数字字段吗
  • 如果 data.color 是字符串 localStorage.getItem("ColorStorage") > 1 是无效状态。所以从语句中删除 >1

标签: javascript jquery local-storage web-storage


【解决方案1】:

localStorage.getItem("ColorStorage") 的返回值是String,因此将其与例如像> 1 这样的数字不起作用。

你可以例如省略> 1,如果项目存在,它将返回true

if (localStorage.getItem("ColorStorage"))  {

}

你当然也可以检查它的length,虽然你确定它存在之后,否则你会得到一个错误,如果它不存在。

if (localStorage.getItem("ColorStorage") && localStorage.getItem("ColorStorage").length > 1)  {

}

另外请注意,如果您在 AJAX 调用为 done 之前进行该调用,则该项目将不存在,但使用上述代码示例不会导致运行时错误。

【讨论】:

  • 是的,那是我的问题。现在它在 Ajax 之外运行良好。我可以从浏览器应用程序选项卡中看到该对象
【解决方案2】:

您可以链接.done 并等待设置该项目:

$.ajax({
    type: "POST",
    url: "validation.php",
    dataType: "json",
    data: $("input").serialize(),
}).done(function(data) {
 if (data.answer) { //if answer is correct
 localStorage.setItem("ColorStorage", data.color); //set a local storage with the variable data.color
    }
}).done(
if (localStorage.getItem("ColorStorage") > 1)
    $("#result").append(localStorage.getItem("ColorStorage"));
);

您需要链接.done 函数以确保您的项目已设置。如果您将其留在ajax 回调之外,您不确定ajax 调用是否已返回并成功设置您的localStorage 项。您将不得不等待它,然后触发您的 getItem 函数。

【讨论】:

  • 你错过了 "...并在 done 方法之外使用它"
  • @LgSon 否,但您不能确定当它到达该行时是否设置了本地存储项。
  • 没错,因此您的回答完全错误,应该专注于该问题...如果这是 OP 的问题,我们仍然不知道
  • 这对我来说是错误的答案(虽然不是技术上)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
  • 2015-06-20
  • 2011-09-06
相关资源
最近更新 更多