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);
}

もちろん、2 つのログはデバッグ用です。問題は、コードのそのセクションが実行されても配列がクリアされないことです。私の構文は間違っていますか、それともグローバル変数や配列を誤解していますか?

4

1 に答える 1

4

によって指定されたインデックスarr_exceptie[0]は、おそらく非数値です。

設定すると、数値で名前が付けられたプロパティlength = 0のみがクリアされるため( ES5 15.4.5.2による)、数値以外の名前のプロパティはクリアされません。たとえば、 と を設定した場合、設定によってプロパティは消去されますが、プロパティは消去されません。date_zile_ore_modificate['foo']date_zile_ore_modificate[5]date_zile_ore_modificate.length=05foo

ただし、変数を新しい配列に設定すると、古い配列オブジェクトが完全に削除されるため、明らかにすべてのプロパティがクリアされます。したがって、使用するだけです

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

すべての場合において、最初の条件付きを排除します。

また、プロパティ名が完全に数値でない場合は、おそらく配列の代わりにプレーン オブジェクトを使用する必要があります (配列は実際には数値インデックス データにのみ適しているため)。

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