【发布时间】: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