Questo per popolare una tabella con la quantità di risultati restituiti dalla query dell'API MediaWiki /api.php?action=query&list=querypage&qppage=BrokenRedirects
. Il numero di risultati viene quindi aggiunto l'id, ad esempio:
// BrokenRedirects
$.getJSON('/api.php?action=query&list=querypage&qppage=BrokenRedirects&format=json', function (data) {
$('#BrokenRedirects').text(data.query.querypage.results.length);
});
Ma mentre viene ripetuto altre 7 volte ho fatto argomenti per qppage in una matrice e utilizzato un ciclo for per accorciare codice generale.
var array = ['BrokenRedirects',
'DoubleRedirects',
'Unusedcategories',
'Unusedimages',
'Wantedcategories',
'Wantedfiles',
'Wantedpages',
'Wantedtemplates'];
for (var i = 0; i < array.length; i++) {
$.getJSON('/api.php?action=query&list=querypage&qppage=' + array[i] + '&format=json', function (data) {
$('#' + array[i]).text(data.query.querypage.results.length);
});
}
La prima versione, non in esecuzione, funziona. Ma quando ho aggiunto un ciclo non lo ha fatto. La parte $getJSON
viene eseguita, ma non riesce ad aggiungere i dati risultanti all'ID. L'ho eseguito tramite JSLint che oltre a lamentarsi delle funzioni in un ciclo e dichiarando var i
con var array
ha restituito un piccolo aiuto. Sono relativamente inesperto con javascript quindi ho pensato che forse una variabile non può essere usata due volte all'interno di un ciclo? Oltre a questo, forse qualcosa a che fare con l'utilizzo di un ID all'interno di un ciclo?
possibile duplicato [Uso setTimeout e un intero in un ciclo] (http://stackoverflow.com/questions/13731759/using-settimeout-and-an-integer- in-a-per-loop) –
possibile duplicato di [chiusura JavaScript all'interno di loop - semplice esempio pratico] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – Bergi
getJSON è una chiamata asincrona REFER: [utilizzare chiamate ajax sincrone] [1] [1]: http://stackoverflow.com/questions/3419026/jquery-getjson-function-timing-issue – Girish