Jquery ajax承诺返回undefined

时间:2017-11-12 12:13:10

标签: javascript jquery ajax promise

我的第二个ajax调用总是返回undefined。

var getrpmData = fetchAjaxData(
                {
                    "MachineID": MachineID,
                    "diaVal": diaVal,
                    "ggVal": ggVal,
                    "ITEMID": ITEMID
                },
                "url_to_call");


            getrpmData.then((rpmData) => {
                console.log(rpmData.d);//getting desired value from this
                if (rpmData.d) {
                    shifHourUsigRPM(rpmData.d);
                }
            })
                .then((prodRate) => {

                    console.log(prodRate.d.KnittingQty);//not getting value
                })
                .fail((err) => {
                    console.log(err);
                }
                );


// Generic function to make an AJAX call
var fetchAjaxData = function (dataParam, dataURL) {
// Return the $.ajax promise
return $.ajax({
    beforeSend: function () { $.blockUI(); },
    complete: function () { $.unblockUI(); },
    type: "POST",
    url: dataURL,
    dataType: "JSON",
    contentType: "application/json;charset=utf-8",
    data: JSON.stringify(dataParam)
});
}

function shifHourUsigRPM(rpm) {

var KnittingWorkOrderId = GetValue($("#cmbKWO").val(), 'dlKWO');
var ITEMID = $("#cmbFabName").val();
var machineId = GetValue($("#cmbMachineID").val(), 'dlMachineID');

    //fetchAjaxData(
    //    { "this_RPM": rpm, "fab": ITEMID, "machineId": machineId, "KWOID": KnittingWorkOrderId },
    //    "pageKnittingProductionPlanning_MachineWise.aspx/KPP_Load_QtyByRPM");   
   return $.ajax({
       type: "POST",
       beforeSend: function () { $.blockUI(); },
       complete: function () { $.unblockUI(); },
        url: "pageKnittingProductionPlanning_MachineWise.aspx/KPP_Load_QtyByRPM",
        dataType: "JSON",
        contentType: "application/json;charset=utf-8",
        data: JSON.stringify({ "this_RPM": rpm, "fab": ITEMID, "machineId": machineId, "KWOID": KnittingWorkOrderId }),
        success: function (data) {
           //var result = data.d;
       }
   });

我的后端网络服务运行正常,并返回所需的值但未在第二次console.log调用中获得该值

低于网络响应的响应:

{"d":{"__type":"BLL.Kniting_BLL.KnittingQty","TotalFabNeed":"5 is production rate","RemFabQty":null}}

我希望我的第二个console.log应该打印

  

" 5是生产率"

,但在控制台上打印undefined

1 个答案:

答案 0 :(得分:1)

您的第一个then回调未返回值,因此第二个then回调 将undefined作为参数。

您应返回 shifHourUsigRPM(rpmData.d)返回的值(即承诺),因此请在该呼叫之前添加return

        getrpmData.then((rpmData) => {
            if (rpmData.d) {
                return shifHourUsigRPM(rpmData.d);
        //      ^^^^^^
            }
        })