41527


Ajax以前 関数の理解が足りないのかも知れませんが、ご教示頂けませんでしょうか？  
以下が現況のコーディングで、当方としては  
AjaxでDBからのデータ取得に成功した際は、その内容を画面の項目へ格納、  
DBからの取得に失敗した場合は エラーコードを画面にうったえる動作を達成したいと考えています。

====質問====  
DB該当なし・接続エラー等の理由でrejectされた際も、DB取得に成功してresolveになった際も、呼び出し側に値を戻すような動作を達成したいのですが、現況のdef.done(function(data){とdef.fail(function(data){
の部分は本来どういった記載を行えば良いのでしょうか？

分からないなりにやってみたものの、現況は戻り値を得られていないようです。どこかを直せば無事に動作するようになるのか、根本的に考え・方針を見直すべきなのかさえ分からない状況です、ご見解を頂けたら幸いです。

[code]

    var text = $(this).parent().parent().find("input"); 
    var param = text.eq(0).val();
    
    
        var def = costGet(param);
        def.done(function(data){
            var unitp = String(data[0]).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
            var totalp = String(data[0] * $(this).val()).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
            label.eq(3).html(unitp);    //★単価★
            label.eq(4).html(totalp);   //★金額★
            return false;
        });
        def.fail(function(data){
            label.eq(3).html("");
            label.eq(4).html("");
            alert(data[0]);
            return false;
        });
    
        //単価情報の取得
        function costGet (cd) {
            var dp_a = new $.Deferred();
            $.ajax({
                url: "cdcostget.php",
                type: "POST",
                dataType: "json",
                data: {
                    in_cd: cd,
                    in_ymd: costGetYM()     // 引数別途入手
                }
            })
            .done(function(data){
                if (data.length <= 0) {
                    dp_a.reject("err#014");     //【該当なし】
                } else {
                    dp_a.resolve(data[0]);      //【成功】
                }
            })
            //サーバ接続エラー
            .fail(function(data){
                console.log("###原価情報取得時のサーバ系エラー###");
                dp_a.reject("err#013");         //【その他エラー】
            });
            return dp_a;
        }
    
[/code]


CC BY-SA 3.0
2018-02-05T12:09:10.630
41487
2018-02-07T01:03:01.803
2018-02-06T00:04:10.380
25696
25696
question
javascript jquery
Defferredで括ったAjaxの戻り値を利用したい


パッと読んだだけですが、`costGet`の戻り値は、`dp_a`ではなく`dp_a.promise()`にしないと、呼び出し側で`done`とか`fail`が正常に使えないのではないですか？


CC BY-SA 3.0
2018-02-07T01:03:01.803
41527
2018-02-07T01:03:01.803
8078
41487
answer