Il valore Javascript esiste, quindi scompare, quindi appare nuovamente?

Questo mi sta guidando. Non posso farlo uscire con Firebug. Può qualcuno spiegare cosa sta succedendo qui?

Fondamentalmente ho un file di text in arrivo in cui each row contiene un record delimitato da pipe. Li divido in una matrix di matrix di stringhe per un utilizzo successivo in una casella di text automatica. Il codice è il seguente:

<script type="text/javascript"> $(function () { var rawData = new Array(); $.get("/sample.txt", function (data) { var raw = data.split('\n'); for (var i = 0; i < raw.length; i++) { rawData.push(raw[i].split('|')); }; alert(rawData); // 1st sanity check } ); alert(rawData); // 2nd sanity check alert(rawData); // 3rd sanity check 

Per qualche motivo il primo controllo di sanità funziona bene – visualizza tutti i dati come mi aspettavo. Il secondo mostra che rawData è vuota … ma la terza mostra nuovamente tutti i dati. Rimuovere il primo controllo di sanità non influenza il secondo e il terzo.

Com'è ansible? Perché è così? Questo mi sta facendo pazzo.

Stai dimentendo che la function get () è una function asynchronous. La chiamata di chiamata definita all'interno verrà richiamata solo una volta caricato il file. In sostanza, l'interpnetworking JavaScript lo mette in una coda pronta per quando l'azione viene completata e quindi consente di eseguire il resto del codice.

Quindi, il tuo avviso nella chiamata riflette il fatto che il file è stato caricato. Gli avvisi esterni verranno eseguiti ben prima che il file venga caricato. Naturalmente, più si attende personalmente di respingere il secondo avviso, meglio è la modifica che il terzo avviso verrà eseguito quando vengono caricati tutti i dati.