data
estresults
écraser, juste après results
a été retourné.
Vous pouvez utiliser la fonction ajax
au lieu de getJSON
, puisque getJSON
est juste un raccourci pour
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
et a également mis en async
-false
, de sorte que l'appel bloque.
Cependant, dans votre cas cela ne fonctionnera pas, car les requêtes JSONP (avec "?callback=?"
) ne peuvent pas être synchrones.
L'autre option (mieux) est que le code dépendant de la valeur de retour results
soit appelé par le rappel success
.
Ainsi, au lieu de quelque chose comme ceci:
var results = ajax.get.venues('search');
$('#results').html(translateResults(results));
Peut-être quelque chose comme ceci:
ajax.get.venues('search', function (results) {
$('#results').html(translateResults(results));
});
venues = function (search, callback) {
$.getJSON("http://x.com/some.php?term="+search+"&callback=?",
function(data){
callback(data);
});
};
Pas un problème d'étendue. Vous devez comprendre le fonctionnement du code asynchrone et des callbacks. Voir par exemple. http://stackoverflow.com/questions/2021114/javascript-jquery-variables-not-giving-expected-values, http://stackoverflow.com/questions/1092563/scope-of-variable-in-javascript-problem pour d'autres qui sont tombés dans le même piège. – bobince