Javascript 在其他函数(JS)末尾运行函数

Javascript 在其他函数(JS)末尾运行函数,javascript,jquery,Javascript,Jquery,我有一个函数可以从数据库中获取计算id 以下是代码: function getClaculationId() { var appointmentid = parseInt($('#appointmentId').text()); var model = { appointmentId:appointmentid } $.ajax({ url: '@Url.Action("GetCalculationId","Calculation

我有一个函数可以从数据库中获取计算id

以下是代码:

function getClaculationId() {

    var appointmentid = parseInt($('#appointmentId').text());
    var model = {
        appointmentId:appointmentid
    }
    $.ajax({
        url: '@Url.Action("GetCalculationId","Calculations")',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(model),
        type: 'POST',
        dataType: 'json',
        processData: false,
        success: function(data) {
            var list = data;
           $("#calculationId").text(list[0].calcId);
        }
    });

}
在此之后,我需要得到这个id并在另一个函数中使用

下面是这个函数的代码

function getConsumables() {
   var calculationId = $('#calculationId').text();
   var model = {
       calcId: parseInt(calculationId)
   };
   $.ajax({
       url: '@Url.Action("GetConsumables", "Calculations")',
       contentType: 'application/json; charset=utf-8',
       data: JSON.stringify(model),
       type: 'POST',
       dataType: 'json',
       processData: false,
       success: function(data) {
           var list = data;
           for (var i = 0; i <= list.length - 1; i++) {
               var calculationTable = '<td class="point">' +
                   (i + 1) +
                   '</td>' +
                   '<td class="title"> ' +
                   list[i].consumableName +
                   '</td>' +
                   '<td class="title"> ' +
                   list[i].quantity +
                   '</td>' +
                   '<td class="title"> ' +
                   list[i].description +
                   '</td>' +
                   '<td class="title"> ' +
                   '</td>' +
                   '<td class="title"> ' +
                   list[i].summ +
                   '</td>';
               $('#consumables').append(calculationTable);
           };
       }
   });
但问题在于,当运行
getconsudies()
时,
calculationId
为空

如何正确编写代码以将calculationId传递给第二个函数


谢谢您的帮助。

我看到了关于向成功函数中添加代码的好评论,换句话说就是将侦听器添加到字段
$(“#fieldId”)。在(“更改”,yourFunctionName)

请注意,
yourFunctionName
是在没有调用的情况下编写的
()


此字段可以隐藏或其他内容。这里的问题是,当您调用尚未收到响应的函数时,通过侦听器或将其添加到成功函数来解决此问题

我认为处理这种类型的场景方法比任何方法都要好。但现在您可以尝试以下方法:

function getClaculationId() {

    var appointmentid = parseInt($('#appointmentId').text());
    var model = {
        appointmentId:appointmentid
    }
    $.ajax({
        url: '@Url.Action("GetCalculationId","Calculations")',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(model),
        type: 'POST',
        dataType: 'json',
        processData: false,
        success: function(data) {
            var list = data;
           //$("#calculationId").text(list[0].calcId);
           getConsumables(list[0].calcId); // Called here with success value
        }
    });

}

function getConsumables(value) {
   //var calculationId = $('#calculationId').text();
   var model = {
       calcId: parseInt(value)
   };
   $.ajax({
       url: '@Url.Action("GetConsumables", "Calculations")',
       contentType: 'application/json; charset=utf-8',
       data: JSON.stringify(model),
       type: 'POST',
       dataType: 'json',
       processData: false,
       success: function(data) {
           var list = data;
           for (var i = 0; i <= list.length - 1; i++) {
               var calculationTable = '<td class="point">' +
                   (i + 1) +
                   '</td>' +
                   '<td class="title"> ' +
                   list[i].consumableName +
                   '</td>' +
                   '<td class="title"> ' +
                   list[i].quantity +
                   '</td>' +
                   '<td class="title"> ' +
                   list[i].description +
                   '</td>' +
                   '<td class="title"> ' +
                   '</td>' +
                   '<td class="title"> ' +
                   list[i].summ +
                   '</td>';
               $('#consumables').append(calculationTable);
           };
       }
   });
}
函数getClaculationId(){
var appointmentid=parseInt($('#appointmentid').text();
var模型={
appointmentId:appointmentId
}
$.ajax({
url:'@url.Action(“GetCalculationId”,“Calculations”),
contentType:'application/json;charset=utf-8',
数据:JSON.stringify(模型),
键入:“POST”,
数据类型:“json”,
processData:false,
成功:功能(数据){
var列表=数据;
//$(“#calculationId”).text(列表[0].calcId);
GetConsumbles(列表[0].calcId);//在此处调用,并带有成功值
}
});
}
功能(价值){
//var calculationId=$('#calculationId').text();
var模型={
calcId:parseInt(值)
};
$.ajax({
url:'@url.Action(“获取消耗品”、“计算”),
contentType:'application/json;charset=utf-8',
数据:JSON.stringify(模型),
键入:“POST”,
数据类型:“json”,
processData:false,
成功:功能(数据){
var列表=数据;

对于(var i=0;我从
getClaculationId()
success
处理程序函数中调用
getconsumposes()
(您可能也想修复函数名中的输入错误)。您甚至可以传递
列表[0].calcId
值作为参数。我会将GetConsumbles函数作为getCalculationId函数的参数传递,以便getCalculationId可以在id准备好后调用GetConsumbles。另一个选项是将GetConsumbles包装到一个setInterval中,直到id出现为止。@kimy82不,永远不要使用计时器处理asynchronicity.
#fieldId
是隐藏的
,因此我认为更改不会起作用。将其更改为
,无论如何,没有人看到此:-)@仅仅因为它位于隐藏字段中而重新连接并不意味着它不容易读取。此外,使用DOM事件处理程序触发以下操作是一种非常糟糕的方法。如果没有DOM,你会怎么做?@Alnitak关于这一点,你可以问其他人,我只是提出了不同的解决方案(来自评论)根据问题中发布的信息,也许他无法更改为字段设置值的源代码?无论如何,每个解决方案都在某个问题的范围内
function getClaculationId() {

    var appointmentid = parseInt($('#appointmentId').text());
    var model = {
        appointmentId:appointmentid
    }
    $.ajax({
        url: '@Url.Action("GetCalculationId","Calculations")',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(model),
        type: 'POST',
        dataType: 'json',
        processData: false,
        success: function(data) {
            var list = data;
           //$("#calculationId").text(list[0].calcId);
           getConsumables(list[0].calcId); // Called here with success value
        }
    });

}

function getConsumables(value) {
   //var calculationId = $('#calculationId').text();
   var model = {
       calcId: parseInt(value)
   };
   $.ajax({
       url: '@Url.Action("GetConsumables", "Calculations")',
       contentType: 'application/json; charset=utf-8',
       data: JSON.stringify(model),
       type: 'POST',
       dataType: 'json',
       processData: false,
       success: function(data) {
           var list = data;
           for (var i = 0; i <= list.length - 1; i++) {
               var calculationTable = '<td class="point">' +
                   (i + 1) +
                   '</td>' +
                   '<td class="title"> ' +
                   list[i].consumableName +
                   '</td>' +
                   '<td class="title"> ' +
                   list[i].quantity +
                   '</td>' +
                   '<td class="title"> ' +
                   list[i].description +
                   '</td>' +
                   '<td class="title"> ' +
                   '</td>' +
                   '<td class="title"> ' +
                   list[i].summ +
                   '</td>';
               $('#consumables').append(calculationTable);
           };
       }
   });
}