Ich mache ein Projekt, das Web-API und JQuery enthält. Eine der HTML-Seiten muss Store und den Namen des Managers des Shops anzeigen.JQuery, wie man mit Rückkehr wartet, bis getJSON fertig ist? (Web API)
Jedes Geschäft hat:
ID,
Storename,
ManagerID.
Jeder Manager hat:
ID,
ManagerName.
Der Speicher enthält den Namen des Managers nicht direkt.
Der Code sieht wie folgt aus:
// There is a html code with <table id='table'>...</table> before the script.
var storesUri = 'api/stores' //The stores uri
$(document).ready(function() {
$.getJSON(storesUri)
.done(function(data) {
$.each(data, function(key, item) {
$('#table).append(
'<tr>' +
'<td>' + item.ID + '</td>' +
'<td>' + item.storeName + '</td>' +
'<td>' + findManagerNameByID(item.ManagerID) + '</td>' + //get the manager name by the manager id
'</tr>');
});
});
});
var managersUri = 'api/managers' //The managers uri
function findManagerNameByID(id) {
var res = 'N/A';
$getJSON(managersUri + '/' + id)
.done(function(data) {
res = data.ManagerName; //puts in res the fit manager name
})
.fail(function(jqXHR, testStatus, err) {
res = 'None';
});
//alert('1');
return res;
}
Nach diesem Code der Tabelle beinhalten muss für jede Speicherung der Filial-ID, Shop-Namen und den Filialleiter Namen. Stattdessen enthält die Tabelle für jedes Geschäft die Geschäfts-ID, den Geschäftsnamen und 'N/A' (der Standardwert von res).
Die Sache ist, dass, wenn ich den Code "alert ('1') hinzufügen;" kurz vor der Rückkehr (Sie können es in Commant sehen) wird die Tabelle in Ordnung sein und es wird für jedes Geschäft die Geschäfts-ID, den Geschäftsnamen und den Filialleiter enthalten, wie ich wollte.
Ich denke, das ist vor dem 'Rückkehr res;' Zeile passiert irgendwie vor dem 'res = data.ManagerName;' Linie (ich denke, weil, wenn der Code die kleine Verzögerung der Warnung vor der Rückkehr hat, ist alles in Ordnung). Wie kann ich sicherstellen, dass die Tabelle ohne Warnung korrekt ausgefüllt wird? danke.
Eine wesentlich effizienter Ansatz wird sein, die "SELECT" in Ihrer API zu etwas wie "SELECT S.ID, S.StoreName, M.ManagerName FROM speichert S, Manager M WHERE S.ManagerID = M.ID" – naveen