Ajax機能を有す関数からの戻り値を、動作完了後に参照・利用したい。
標題の件を達成しようと、インターネット上の記事を参考に挑戦中ですが、自身の未熟さから理解に苦しみ中々進展をえることができません。毎度のことで大変申し訳ありませんが、どなたかご教示をお願いできませんでしょうか?
質問
Ajaxの動作完了を$.Deferred()というものの利用で認識できる記事をお見かしますが、Ajax利用の関数側がConsole.logで文字を表示するだけの紹介が多い気がします...
Ajax利用でデータ取得した結果を当該関数の戻り値として返したいのですが、こちらの完了検知と併せて戻り値を取得するには如何したらよろしいのでしょうか?現況関数の呼び出し側に戻り値が得られていないように受けて取れます。(開発ツールでみる限りAjax自体は機能しており応答を返している様子だが)
達成したいことのイメージ
画面で指定された日付が、AJAXで参照するDB側のカレンダで稼働日か否か、はたまた参照に失敗したかというエラー検知を行おうとしています。
見よう見まねでコーディングしたのが現況です。誤った部分をご指摘頂けますと幸いです。
//errnoが戻ってくれば、DBを参照できなかったか当該日が稼働日ではなかった、ということ。
var deferred = sdateCheck();
if (deferred.done(function(){}) != "") {
errhandler($(this), false, "err#014");
errhandler($(this), false, "err#015");
} else {
errhandler($(this), true, errno);
};
function sdateCheck () {
var deferred = new $.Deferred();
var arr_ymd = $("#calendar").val().split("/");
var yyyymmdd = arr_ymd[0] + arr_ymd[1] + arr_ymd[2];
var errno = "";
$.ajax({
url: "sdatecheck.php",
type: "POST",
dataType: "json",
data: {
maker_no: yyyymmdd,
}
})
.done(function(data){
//sdatecheck.phpからのSELECT結果1項目が戻る。「0」は稼働日
if (data[0] != 0) {
errno = "err#014";
}
})
.fail(function(){
console.log("失敗");
errno = "err#015";
})
.always(function(){ //みようみまね
deferred.resolve(); //みようみまね
}); //みようみまね
return deferred; //みようみまね
return errno; //勘
}