$.get
経由でサーバーから取得した値を返す関数を作成するにはどうすればよいですか?AJAXリクエストから値を取得する関数
これは私が仕事しない、しようとしたものです:
function getMessage(key) {
$.get("/messages.json", function(data) {
return data.messages[key];
}, "json");
}
任意のアイデア?
$.get
経由でサーバーから取得した値を返す関数を作成するにはどうすればよいですか?AJAXリクエストから値を取得する関数
これは私が仕事しない、しようとしたものです:
function getMessage(key) {
$.get("/messages.json", function(data) {
return data.messages[key];
}, "json");
}
任意のアイデア?
Ajaxリクエストはですので、非同期です。そのため、データが利用可能になると、を処理するために、$.get
にコールバックを渡す必要があります。しかし、getMessage
関数は、$.get
コールバックが実行される前に戻ります。
戻り値で何かをしているコールバックを渡す必要があります。例:もちろん
function getMessage(key, cb) {
$.get("/messages.json", function(data) {
cb(data.messages[key]);
}, "json");
}
getMessage('foo', function(data) {
alert(data);
});
あなたも$.get
に直接callackを渡し、そこにデータ抽出を扱うことができます。
function getMessage(cb) {
$.get("/messages.json", cb);
}
+1しかし、最後の文は混乱しています。とにかく 'getMessage'がすぐに戻ります。 –
@Daniel Earwicker:はい、それを修正しました;) –
これを処理するには、$.ajax
経由で同期呼び出しを使用するか、値を返すのではなく関数にコールバックを渡す方法があります。後者は、コールの非同期性を保持するため、AJAXを扱う標準的な方法です。
非同期
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);
});
});
同期 - それが行われるまで、あなたのブラウザをロックしますので、この方法でそれを行うしないようにしてください。
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);
});
注:これらはテストされていません。
は、我々 'メッセージで返される(たぶん)JSON形式のデータを抜粋することができます。 json'? –