Est-il possible de définir async: false
lors de l'appel de $.getJSON()
sorte que l'appel bloque plutôt que d'être asynchrone?
Est-il possible de définir async: false
lors de l'appel de $.getJSON()
sorte que l'appel bloque plutôt que d'être asynchrone?
Réponses:
Vous devez effectuer l'appel en l'utilisant $.ajax()
de manière synchrone, comme ceci:
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
//stuff
//...
}
});
Cela correspondrait à l'utilisation actuelle $.getJSON()
comme ceci:
$.getJSON(myUrl, myData, function(data) {
//stuff
//...
});
type: 'POST'
option pour en faire un article - bien que vous ne souhaitiez pas l'utiliser à async: false
moins que vous n'en ayez vraiment besoin - cela bloquera l'interface utilisateur.
Les deux réponses sont fausses. Vous pouvez. Vous devez appeler
$.ajaxSetup({
async: false
});
avant votre appel json ajax. Et vous pouvez le définir sur true après la relance de l'appel (s'il y a d'autres utilisations d'ajax sur la page si vous les voulez asynchrones)
$.ajax
(et emballages sténographiques ultérieurs à savoir $.getJSON
, $.get
etc.) pour être synchrone. De plus, la documentation suggère même de ne pas utiliser ceci: "Description: Définissez les valeurs par défaut pour les futures requêtes Ajax. Son utilisation n'est pas recommandée."
Dans mon cas, Jay D a raison. Je dois ajouter ceci avant l'appel.
$.ajaxSetup({
async: false
});
Dans mon code précédent, j'ai ceci:
var jsonData= (function() {
var result;
$.ajax({
type:'GET',
url:'data.txt',
dataType:'json',
async:false,
success:function(data){
result = data;
}
});
return result;
})();
alert(JSON.stringify(jsonData));
Cela fonctionne trouver. Puis je change pour
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
L'alerte n'est pas définie.
Si j'ajoute ces trois lignes, l'alerte affiche à nouveau les données.
$.ajaxSetup({
async: false
});
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
Je ne pense pas que vous puissiez définir cette option ici. Vous devrez utiliser jQuery.ajax () avec les paramètres appropriés (en gros, getJSON encapsule simplement cet appel dans une API plus simple).
Roulez votre propre par exemple
function syncJSON(i_url, callback) {
$.ajax({
type: "POST",
async: false,
url: i_url,
contentType: "application/json",
dataType: "json",
success: function (msg) { callback(msg) },
error: function (msg) { alert('error : ' + msg.d); }
});
}
syncJSON("/pathToYourResouce", function (msg) {
console.log(msg);
})