Es gibt zwei Möglichkeiten, dies zu handhaben: Verwenden Sie einen synchronen Aufruf über $.ajax
oder übergeben Sie einen Callback an Ihre Funktion, anstatt einen Wert zurückgeben zu lassen. Letzteres ist die kanonische Art, mit AJAX umzugehen, da es den asynchronen Charakter des Aufrufs beibehält.
Asynchronous
function processMessage(key,elem,cb) {
$.get('/messages.json', function(data) {
if (cb && typeof(cb) === 'function') {
cb.apply(elem,data.messages[key]);
}
}
}
$('.something').each(function() {
processMessage('somekey', this, function(msg) {
$(this).append(msg);
});
});
Synchrone - versuchen Sie nicht, es auf diese Weise zu tun, da Sie Ihren Browser sperren werde, bis es fertig ist.
function getMessage(key)
{
var result = '';
$.ajax({
url: '/messages.json',
aSync: false,
type: 'get',
dataType: 'json',
success: function(data) {
result = data.messages[key];
}
});
return result;
}
$('.something').each(function() {
var msg = getMessage('somekey');
$(this).append(msg);
});
Hinweis: Diese sind nicht getestet.
Können wir ein Ausschnitt der (hoffentlich) JSON-Format zurückgegebenen Daten durch 'Nachrichten. Json? –