Ist es möglich, async: false
beim Aufrufen $.getJSON()
festzulegen, dass der Anruf blockiert und nicht asynchron ist?
Ist es möglich, async: false
beim Aufrufen $.getJSON()
festzulegen, dass der Anruf blockiert und nicht asynchron ist?
Antworten:
Sie müssen den Anruf $.ajax()
synchron wie folgt tätigen :
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
//stuff
//...
}
});
Dies würde derzeit $.getJSON()
wie folgt übereinstimmen :
$.getJSON(myUrl, myData, function(data) {
//stuff
//...
});
type: 'POST'
Option hinzufügen , um daraus einen Beitrag zu machen - obwohl Sie ihn nur verwenden möchten, async: false
wenn Sie es wirklich brauchen - wird die Benutzeroberfläche gesperrt.
Beide Antworten sind falsch. Sie können. Sie müssen anrufen
$.ajaxSetup({
async: false
});
vor Ihrem json ajax anruf. Und Sie können es auf true setzen, nachdem der Anruf erneut ausgeführt wurde (wenn auf der Seite andere Verwendungen von Ajax vorhanden sind, wenn Sie möchten, dass sie asynchron sind).
$.ajax
(und spätere Stenografie Wrapper dh $.getJSON
, $.get
etc.) synchron sein. Darüber hinaus wird in der Dokumentation sogar empfohlen, dies nicht zu verwenden: "Beschreibung: Legen Sie Standardwerte für zukünftige Ajax-Anforderungen fest. Die Verwendung wird nicht empfohlen."
In meinem Fall hat Jay D recht. Ich muss dies vor dem Anruf hinzufügen.
$.ajaxSetup({
async: false
});
In meinem vorherigen Code habe ich Folgendes:
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));
Es funktioniert zu finden. Dann wechsle ich zu
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
Die Warnung ist undefiniert.
Wenn ich diese drei Zeilen hinzufüge, werden die Daten in der Warnung erneut angezeigt.
$.ajaxSetup({
async: false
});
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
Ich glaube nicht, dass Sie diese Option dort einstellen können. Sie müssen jQuery.ajax () mit den entsprechenden Parametern verwenden (im Grunde verpackt getJSON diesen Aufruf auch in eine einfachere API).
Rollen Sie Ihre eigenen zB
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);
})