在Jquery done方法中使用localstorage

时间:2018-04-15 14:54:41

标签: javascript jquery local-storage web-storage

我想在用户的答案正确时在.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"));

2 个答案:

答案 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函数。