jQuery deferredsを正しく使用して、関数内の非同期呼び出しが完了するまで関数の戻りを遅らせ、戻り値を取得するにはどうすればよいですか?
これは私の現在のコードです:
function getFields(page)
{
var dff = $.Deferred();
result = {};
$.ajax( //the async call
{
url: page,
success:
function (data)
{
//work out values for field1 & field 2 from data here
result =
{
'field1' : field1,
'field2' : field2
};
},
complete:
function()
{
dff.resolve(result); //my attempt to return the result
}
}
);
return dff.promise();
}
これで{"field1": "value1"、 "field2":"value2"}を出力したい
var result = getFields('http://something');
console.log(JSON.stringify(result));
ただし、resultの値はjQueryオブジェクトのように見えるので、何か間違ったことをしていますが、どうでしょうか。
ありがとう!
PS初心者の質問で申し訳ありませんが、私はdeferredを初めて使用するので、まだ基本的な概念を理解しています。