2010-08-20 6 views
1
function json (url){ 
     $.getJSON(url, function(data) { 
      return data; 
     }) 
    } 

cette fonction ne voient pas "données"fonction ne voyez pas l'objet JSON (java script, jQuery)

function MakeAlert(){ 
     data = json('action.php'); 
     window.alert(data.name); 
} 

ce travail:

function json (url){ 
      $.getJSON(url, function(data) { 
       window.alert(data.name); 
      }) 
    } 

Répondre

2

C'est parce que le $.getJSON est asynchrone. Il envoie la demande et retourne immédiatement. Une fois que le serveur répond (ce qui pourrait être quelques secondes plus tard), il appelle le rappel success et c'est pourquoi le data est accessible uniquement dans ce rappel.

Si vous voulez bloquer l'appelant, vous pouvez envoyer une demande synchrone (notez que cela pourrait geler l'interface utilisateur alors que la demande est en cours d'exécution qui contrecarre le but de l'AJAX):

function json(url) { 
    var result = null; 
    $.ajax({ 
     url: url, 
     async: false, 
     dataType: 'json', 
     success: function(data) { 
      result = data; 
     } 
    }); 
    return result; 
} 
+0

Merci. maintenant devenir clair – user426134

1
function json (url){ 
    $.getJSON(url, function(data) { 
     return data; 
    }) 
} 

Vous ne peut pas utiliser return ici. Vous devez retourner data à la fonction de fermeture anonyme.

La meilleure solution est d'utiliser un callback function qui doit être appliqué lorsque le gestionnaire de succès getJSON est exécuté.

function json (url, cb){ 
    $.getJSON(url, function(data) { 
     cb.apply(null, [data]); 
    }) 
} 

utilisation

json('action.php', function(data){ 
    alert(data); 
});