我想在用户的答案正确时在.done方法中设置localstorage。然后我想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"));
答案 0 :(得分:2)
localStorage.getItem("ColorStorage")
的返回值为String
,因此请将其与例如> 1
进行比较。像> 1
这样的数字不会起作用。
你可以,例如省略true
,如果项目存在,它将返回if (localStorage.getItem("ColorStorage")) {
}
。
length
您当然也可以检查其if (localStorage.getItem("ColorStorage") && localStorage.getItem("ColorStorage").length > 1) {
}
,但 之后确定它存在,否则如果不存在则会出现错误。
done
另外请注意,如果您在AJAX调用datagridview
之前进行了该调用,则该项目不会存在,但是使用上面的代码示例它不会导致运行时错误。
答案 1 :(得分:0)
您可以链接.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函数。