【问题标题】:Jquery ajax promise returning undefinedJquery ajax 承诺返回未定义
【发布时间】:2019-08-03 15:19:30
【问题描述】:

我的第二个 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;
       }
   });

我的后端 Web 服务运行良好,并返回所需的值,但在第二次 console.log 调用时未获得该值

从网络响应中得到以下响应:

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

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

“5 是生产率”

,但在控制台上打印undefined

【问题讨论】:

  • 您的第一个 then 回调没有返回值。无论您期望第二个then 回调参数的值是什么,它都将是您在第一个then 回调中返回的值。由于您没有在那里返回任何东西,因此您不会在第二秒内得到任何东西。
  • 我的第一个然后是调用 shifHourUsigRPM(rpmData.d); 这应该返回另一个承诺
  • 所以在调用shifHourUsigRPM(rpmData.d)之前添加return。否则返回的承诺将无处可去。
  • 请看一下我在代码下面包含的 shifHourUsigRPM(rpmData.d) 实现。 shifHourUsigRPM 肯定会回归
  • 我不是在谈论该函数的内部返回语句。那没问题。我说的是你对返回的承诺做了什么:你什么都不做。您需要从then 回调中(再次)返回它。只需在shifHourUsigRPM(rpmData.d)调用之前添加return

标签: javascript jquery ajax promise


【解决方案1】:

您的第一个 then 回调没有返回值,所以第二个 then 回调 将得到undefined 作为参数。

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

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

【讨论】:

    猜你喜欢
    • 2015-09-27
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多