problema Scope con nidificato $ GetJSON
Domanda
$.getJSON('http://twitter.com/followers/ids.json?screen_name=/…'+ query1 + '&callback=?',
function(data) {
alert('JSON data string 1 is: '+data);
$.getJSON('http://twitter.com/followers/ids.json?screen_name=/…'+ query2 + '&callback=?',
function(data1) {
alert('JSON data string 2 is: '+data1);
f2=data1;
f1=data;
for(var i=0; i "less than" f1.length; i++)
{
for(var j=0; j "less than" f2.length; i++)
{
if (f1[i] == f2[j])
{
common[c]=f1[i];
c+=1;
}
}
}
$('#content').append(''+common.length+'');//this line is not working though.......
});
});
In questo pezzo della linea
$('#content').append(''+common.length+'');
non mostra l'output in realtà la pagina si blocca
Ogni aiuto sarà apprezzato.
Grazie
Soluzione
Non annidare le chiamate. È inoltre evitare alcuni problemi di memoria in cui javascript mantiene una copia di tutte le variabili locali per ogni funzione anonima. Facendo le due chiamate separatamente, è inoltre possibile eseguire entrambe le chiamate in una sola volta, invece di sequenza.
Questo è un metodo migliore se capisco il vostro scopo. Plus di polling Gota e gotB si può anche fare un bel po ' "in attesa di A, in attesa di B" di notifica per gli utenti.
Modifica: Aggiunto per la correzione del ciclo di risposta precedente
.var gotA, gotB;
var followingA, followingB;
function getCommonFollowers(user1, user2)
{
gotA = false;
gotB = false;
jQuery.getJSON('http://twitter.com/followers/ids.json?screen_name=/…'+ user1 + '&callback=?', gotFollowersOfA );
jQuery.getJSON('http://twitter.com/followers/ids.json?screen_name=/…'+ user2 + '&callback=?', gotFollowerOfB );
}
function gotFollowersOfA(data)
{
followingA = data;
gotA = true;
if (gotB) {
compareFollowersAB();
}
}
function gotFollowersOfB(data)
{
followingB = data;
gotB = true;
if (gotA) {
compareFollowersAB();
}
}
function compareFollowersAB()
{
f2=followingA;
f1=followingB;
for(var i=0; i < f1.length; i++) {
for(var j=0; j < f2.length; j++) {
if (f1[i] == f2[j]) {
//console.log("Adding f1[i]");
common.push(f1[i]);
}
}
}
$('#content').append(''+common.length+'');
}
Altri suggerimenti
Il secondo per incrementi Loop I al posto di j.
Tu non dichiarare le tue Vars, che possono portare a problemi di portata, ecc.
Si può incollare il codice vero e proprio, è un difficile chiedere di aspettarsi chiunque di diagnosticare il problema senza script.
Anche creare una demo del problema a jsbin.com o pastebin.me tutta a questo.
Si dovrebbe usare Grande Tartaruga , ma da quando ho provato comunque, ecco una versione modificata del codice che funziona:
var query1 = 'user1';
var query2 = 'user2';
var data;
var data1;
var f1;
var f2;
var common = [];
var c = 0;
$(document).ready(function() {
$.getJSON('http://twitter.com/followers/ids.json?screen_name=' + query1 + '&callback=?',
function(data) {
console.log('JSON data string 1 is: ' + data);
$.getJSON('http://twitter.com/followers/ids.json?screen_name=' + query2 + '&callback=?',
function(data1) {
console.log('JSON data string 2 is: ' + data1);
f2=data1;
f1=data;
for(var i=0; i < f1.length; i++) {
for(var j=0; j < f2.length; j++) {
if (f1[i] == f2[j]) {
//console.log("Adding f1[i]");
common.push(f1[i]);
}
}
}
$('#content').append(''+common.length+'');
});
});
});
La correzione principale è stato che il secondo ciclo for, come accennato in precedenza, utilizzare i ++ al posto di j ++, in modo che i cicli sono stati impazzendo.
Si noti che ho cambiato il vostro avviso richiama alla console.log, in modo da assicurarsi che si sta utilizzando Firefox con Firebug installato, o semplicemente sostituire il console.log con il vostro avviso di nuovo.
non dovrebbe essere con 'http: //'
? $.getJSON('http://twitter.com...'
Dichiarare la variabile fuori comune le funzioni JSON.