以向导形式清除本地存储的问题

时间:2017-10-05 07:09:29

标签: javascript jquery

我正在使用步骤向导表单和以下代码

$(document).ready(function(){
    localStorage.removeItem('dateFormat');
    readcategories();
    ...
    ...
    });

function getDateFormatFromDatabase() {
    $.ajax({
        url: 'index.php?action=getDateFormat',
        type: 'POST',
        dataType: 'JSON',
        success: function(data)
        {
            dateFormat = data.dateFormat;
            localStorage['dateFormat'] = dateFormat;
        }
    });
}

function getDateFormat() {
    getDateFormatFromDatabase();
    var dateFormat = localStorage['dateFormat'];
    //  alert(dateFormat);
    return dateFormat;
}

function checkValidDate(dateValue) {
    var dateFormat = getDateFormat();
    ...
    ...
}


..... wizard form code
.....

onFinishing: function (event, currentIndex) {
    var form = $(this);

    var purchasedate = $("#purchasedate").val().trim();
    var purchasedate = new Date(purchasedate);
    if(checkValidDate(purchasedate.toDateString()) == false)
    {
        displayDateErrorMessage("Purchase Date");
        return false;
    }
    ...
}

我正在清除localStorage document.ready函数,因为我希望它始终包含从函数getDateFormat中的数据库中获取的新值。现在它总是清除dateFormat,结果总是得到未定义的值,日期没有验证......

请帮忙!!!

1 个答案:

答案 0 :(得分:0)

<强> FIRST:

而不是使用:

localStorage['dateFormat'] = dateFormat;

var dateFormat = localStorage['dateFormat'];

你需要:

localStorage.setItem('dateFormat', dateFormat);

var dateFormat = localStorage.getItem('dateFormat');

详细了解localStorage here

<强> SECOND:

函数getDateFormatFromDatabase();包含ajax调用。由于ajax调用是异步操作,这意味着在调用dateFormat后,您不会将localStorage设置为getDateFormatFromDatabase();。要解决此问题,您需要通过设置async: false

使其同步
function getDateFormatFromDatabase(callback) {
    $.ajax({
        url: 'index.php?action=getDateFormat',
        type: 'POST',
        async: false,
        dataType: 'JSON',
        success: function(data)
        {
            localStorage.setItem('dateFormat', data.dateFormat);
        }
    });
}