2013-09-02 5 views
1

donc je veux un script simple, qui montre si un utilisateur est en ligne à twitch ou non. Je connais le codage en général, mais je n'ai jamais vraiment traité avec les rappels. Donc, ceci est mon code de base.Complètement confondu avec jQuery et Callbacks

jQuery(document).ready(function(){ 

    var streamLink = 'http://api.justin.tv/api/stream/summary.json?channel=ReasNSC2&jsonp=?'; 

    $.getJSON(streamLink, function(a) { 
     if (a.viewers_count != "0") 
     { 
      alert(true) 
     }else { 
      alert(false) 
     }; 
    }); 
}); 

Le code ci-dessus fonctionne correctement. J'ai obtenu le résultat attendu. Alors maintenant je veux utiliser le résultat dans mon code. Donc, ma première pensée est: Utilisons des déclarations de retour.

jQuery(document).ready(function(){ 
    alert(getStatus()) 
}); 
    function getStatus() 
    { 
     var streamLink = 'http://api.justin.tv/api/stream/summary.json?channel=ReasNSC2&jsonp=?'; 

     $.getJSON(streamLink, function(a) { 
      if (a.viewers_count != "0") 
      { 
       return(true) 
      }else { 
       return(false) 
      }; 
     }); 
    } 

J'ai donc "créé" ceci. Ne fonctionnera pas. J'ai trouvé beaucoup d'explications sur internet et sur stackoverflow mais je n'ai pas pu extraire quelque chose qui m'aidait vraiment. Quelqu'un peut-il me donner un coup de main avec cette question de base?

Je veux faire la demande et ensuite procéder. Un grand merci à l'avance :)

+0

@FelixKling vous obtenez tous de votre représentant en pointant les gens à cette question? ;-) – Alnitak

+0

@Alnitak:: D Je vais vous laisser faire le calcul;) –

Répondre

1

Vous utilisez déjà callbacks dans votre code, par exemple:

$.getJSON(streamLink, function(a) {... //where function(a) is the anonymus callback function 

Si vous ajoutez une fonction de rappel comme argument à votre fonction 'getStatus' comme:

function getStatus(callback){ 
    $.getJSON(streamLink, function(a) { 
    if (a.viewers_count != "0") { 
     callback(true); 
    } else { 
     callback(false); 
    }; 
    }); 
} 

Et appelez sur elle comme:

jQuery(document).ready(function(){ 
    getStatus(function(result){ alert(result); }); 
    //or even in this case you could just add the 'alert' as the callback: 
    getStatus(alert); 
}); 
1

C'est parce que vous êtes dans un rappel, vous devez utiliser une fonction de rappel afin d'envoyer la valeur. Quelque chose comme:

function getStatus() 
{ 
    var returnValue; 
    var streamLink = 'http://api.justin.tv/api/stream/summary.json?channel=ReasNSC2&jsonp=?'; 

    $.getJSON(streamLink, function(a) { 
     if (a.viewers_count != "0") { 
      returnFunction(true); 
     } 
     else { 
      returnFunction(false); 
     }; 
    }); 
} 

function returnFunction(value) 
{ 
    //do something with your value. 
} 
+1

encore ça ne fonctionnera pas parce qu'il est à l'intérieur d'un rappel asynchrone –

+0

@ArunPJohny Vous avez raison, mis à jour. – mattytommo

0

Vous devez faire quelque chose comme

jQuery(document).ready(function() { 
    getStatus(function (status) { 
     alert(status) 
    }) 
}); 

function getStatus(callback) { 
    var streamLink = 'http://api.justin.tv/api/stream/summary.json?channel=ReasNSC2&jsonp=?'; 

    function callCallback(result) { 
     if ($.isFunction(callback)) { 
      callback(result) 
     } 
    } 

    $.getJSON(streamLink, function (a) { 
     if (a.viewers_count != "0") { 
      callCallback(true) 
     } else { 
      callCallback(false) 
     }; 
    }); 
}