関数内で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' }); }
コメントが承認されるまで時間がかかります。