関数内でAjaxを使用した際に、そのレスポンスを返り値にする方法をメモ。
サンプルコード
まずはうまくいかない例で、Ajaxの処理後にレスポンスを返してみます。
$(function() {
var data = getData();
console.log(data);
});
function getData() {
$.ajax({
url: 'data.json'
})
.then(
function (data) {
return data;
},
function (error) {
return error;
}
);
}
この場合はレスポンスを返すことができず、consoleにはundefinedが表示されます。
Ajaxは非同期通信のため、レスポンスを返す前に関数内の処理が終わってしまうためです。
うまくいかない場合のデモページ
Ajaxの処理自体を返すようにすると、そのレスポンスを返り値にすることができます。
$(function() {
var data = getData();
console.log(data);
});
function getData() {
return $.ajax({
url: 'data.json'
});
}
この場合はレスポンスを返り値として取得できました。
レスポンスを取得するデモページ
最初の例のようにthen()を使って成功時と失敗時で処理を分けたい場合、返り値を取得した後でその値に対してthen()を使うことができます。
$(function() {
var data = getData();
console.log(data);
data.then(
function (data) {
console.log(data);
},
function (error) {
console.log(error);
}
);
});
function getData() {
return $.ajax({
url: 'data.json'
});
}
コメントが承認されるまで時間がかかります。