0

我在 Ajax 请求后使用全局 javascript 变量来存储一些数据。它用于在 jqueryui datepicker 上标记日期并存储在表单中array[date] = type_of_date

这是我用来计算数组的函数

function get_date_exceptii(data, cod_calendar) {

if(typeof(window.date_zile_ore_modificate) !== 'undefined' && typeof(window.date_zile_nelucratoare) !== 'undefined') {
    window.date_zile_ore_modificate.length = 0;
    window.date_zile_nelucratoare.length = 0;
}
else {
    window.date_zile_ore_modificate = [];
    window.date_zile_nelucratoare  = [];
}

parametri = 'cod_calendar='+cod_calendar+'&data='+data;

$j.ajax({
    url: "proiecte/ajax/colectare_date_exceptii.php?sid="+Math.random(),
    type: 'POST',     
    async: false,
    data: parametri             
})
.done( function (msg) {
    arr_msg = msg.split('[sep1]');
    $j.each(arr_msg, function (index, val) {
        arr_exceptie = val.split('[sep]');
        if(arr_exceptie[1] == 'nelucratoare')
            window.date_zile_nelucratoare[arr_exceptie[0]] = arr_exceptie[2];
        else {
            window.date_zile_ore_modificate[arr_exceptie[0]] = arr_exceptie[2];
        }
    }); 
});
console.log(window.date_zile_ore_modificate);
console.log(window.date_zile_nelucratoare);
}

当然,这两个日志是用于调试的。问题是即使执行了那段代码,数组也永远不会被清除。我的语法错误还是我在这里误解了全局变量和/或数组?

4

1 回答 1

4

指定的索引arr_exceptie[0]可能是非数字的。

设置length = 0只会清除以数字命名的属性(根据ES5 15.4.5.2),因此不会清除具有非数字名称的属性。例如,如果您设置date_zile_ore_modificate['foo']and date_zile_ore_modificate[5],则设置会date_zile_ore_modificate.length=0清除该5属性,但不会清除该foo属性。

但是,将变量设置为全新的数组显然会清除所有属性,因为它完全消除了旧的数组对象。因此,只需使用

window.date_zile_ore_modificate = [];
window.date_zile_nelucratoare  = [];

在所有情况下并消除您的初始条件。

此外,如果您的属性名称完全不是数字,您可能应该使用普通对象而不是数组(因为数组实际上只适用于数字索引数据):

window.date_zile_ore_modificate = {};
window.date_zile_nelucratoare  = {};
于 2013-10-11T14:42:28.120 回答