Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确保javascript函数按特定顺序执行_Javascript_Jquery_Ajax_Model View Controller_Datatables - Fatal编程技术网

确保javascript函数按特定顺序执行

确保javascript函数按特定顺序执行,javascript,jquery,ajax,model-view-controller,datatables,Javascript,Jquery,Ajax,Model View Controller,Datatables,我有一个使用ajax post方法和数据表的程序。经过几周的磨蹭,我确定我根本不明白javascript是如何工作的。 以下是我的javascript: $('#SaveTimeSheet').click(function () { $("#TimeSheetLoader").removeClass("hidden"); GetSheetCount(); }); function GetSheetCount() {

我有一个使用ajax post方法和数据表的程序。经过几周的磨蹭,我确定我根本不明白javascript是如何工作的。 以下是我的javascript:

$('#SaveTimeSheet').click(function () {
            $("#TimeSheetLoader").removeClass("hidden");
            GetSheetCount();
        });
        function GetSheetCount() {
            $.ajax({
                url: '@Url.Action("GetTimeSheetCount","TimeSheet",null)',
                type: "POST",
                data:{
                    OperatorId: $("#OperatorId option:selected").val()
                },
                success: function (Result) {
                    StartTimeSheet(Result.Result);
                }
            });
        }
        function StartTimeSheet(Result) {
            $.ajax({
                type: "POST",
                url: '@Url.Action("Create", "TimeSheet", null)',
                data: {
                    SpecificLocation: $("#SpecificLocation").val(),
                    DetailedPoint: $("#DetailedPoint").val(),
                    SheetStatus: $("#statusSlider").val(),
                    Description: $("#Description").val(),
                    OperatorHours: $("#OperatorHoursSlider").attr("data-value"),
                    OperatorMins: $("#OperatorMinsSlider").attr("data-value"),
                    AssistantHours: $("#AssistantHoursSlider").attr("data-value"),
                    AssistantMins: $("#AssistantMinsSlider").attr("data-value"),
                    OriginalQuote: $('input[name=OriginalQuote]:checked').val(),
                    QuoteNo: $("#QuoteNo").val(),
                    SINumber: $("#SINumber").val(),
                    OperatorId: $("#OperatorId option:selected").val(),
                    SiteName: $("#SiteId option:selected").text(),
                    Code: $("#SiteId option:selected").val() + "-" + $("#OperatorId option:selected").val() + "-" + (Result + 1) + "-" + today
                },
                success: function (Result) {
                    ProcessTable(Result.Result);                      
                },
                error: function (x, e) {
                    if (x.status == 0) {
                        alert('You are offline!!\n Please Check Your Network.');
                    } else if (x.status == 404) {
                        alert('Requested URL not found.');
                    } else if (x.status == 500) {
                        alert('Internel Server Error.');
                    } else if (e == 'parsererror') {
                        alert('Error.\nParsing JSON Request failed.');
                    } else if (e == 'timeout') {
                        alert('Request Time out.');
                    } else {
                        alert('Unknow Error.\n' + x.responseText);
                    }
                }
            });
        }

        function ProcessTable(Result) {
            console.log("Start Table Process");
            var datas = t.rows().data();
            var total = $("#Table tr").length - 1;
            var counter = 0;
            for (var i = 0; i < total; i++) {
                var value = datas[i];
                AddItems(value, Result);
                counter = counter + 1;
            }
            if (counter === total) {
                SendPDF(Result);
            }
        }

        function AddItems(value, Result) {
                $.ajax({
                    type: "POST",
                    url: '@Url.Action("ProcessTable","TimeSheet",null)',
                    data: {
                        TimeSheetId:Result,
                        BOM_NO: value[0],
                        Stock_Code: value[1],
                        Stock_Description: value[2],
                        Quantity: value[3]
                    },
                    success: function (data) {
                        console.log(data.Result);
                    },
                    error: function () {
                        console.log("Error");
                    }
                });
        }
        function SendPDF(Result) {
            $.ajax({
                type: "GET",
                url: '/TimeSheet/SendTimeSheet?Id='+Result,
                success: function (data) {
                    console.log(data.Result);
                    location.reload();
                }
            });
        }
$(“#保存时间表”)。单击(函数(){
$(“#TimeSheetLoader”).removeClass(“隐藏”);
GetSheetCount();
});
函数GetSheetCount(){
$.ajax({
url:'@url.Action(“GetTimeSheetCount”,“TimeSheet”,null)”,
类型:“POST”,
数据:{
运算符ID:$(“#运算符ID选项:选中”).val()
},
成功:功能(结果){
StartTimeSheet(Result.Result);
}
});
}
函数StartTimeSheet(结果){
$.ajax({
类型:“POST”,
url:'@url.Action(“创建”,“时间表”,空)”,
数据:{
SpecificLocation:$(“#SpecificLocation”).val(),
DetailedPoint:$(“#DetailedPoint”).val(),
SheetStatus:$(“#statusSlider”).val(),
说明:$(“#说明”).val(),
OperatorHours:$(“#OperatorHoursSlider”).attr(“数据值”),
运算符名:$(“#运算符名滑块”).attr(“数据值”),
辅助方法:$(“#辅助方法”).attr(“数据值”),
AssistantMins:$(“#assistantminslider”).attr(“数据值”),
OriginalQuote:$('input[name=OriginalQuote]:选中').val(),
QuoteNo:$(“#QuoteNo”).val(),
SINumber:$(“#SINumber”).val(),
运算符ID:$(“#运算符ID选项:选定”).val(),
SiteName:$(“#SiteId选项:选定”).text(),
代码:$(“#SiteId选项:选中”).val()+“-”+$(“#OperatorId选项:选中”).val()+“-”+(结果+1)+“-”+
},
成功:功能(结果){
ProcessTable(Result.Result);
},
错误:函数(x,e){
如果(x.status==0){
警报('您已脱机!!\n请检查您的网络');
}否则如果(x.status==404){
警报(“未找到请求的URL”);
}否则如果(x.status==500){
警报(“Internel服务器错误”);
}else if(e=='parserrror'){
警报('错误。\n传递JSON请求失败');
}else if(e=='timeout'){
警报(“请求超时”);
}否则{
警报('未知错误。\n'+x.responseText);
}
}
});
}
函数ProcessTable(结果){
log(“起始表进程”);
var data=t.rows().data();
var总计=$(“#表tr”)。长度-1;
var计数器=0;
对于(变量i=0;i
我一直遇到的问题是程序在处理稳定函数的中间执行SDEPDF函数。我试图通过使用if语句来阻止这种情况,但它仍然执行

如果你知道如何修复我的代码,太好了。但如果你能解释一下javascript是如何执行函数的,以及执行的顺序。以及如何控制这种秩序。那太好了

但如果你能解释一下javascript是如何执行函数的,以及执行的顺序。以及如何控制这种秩序。那太好了

JavaScript函数的工作原理与大多数其他语言中的函数类似:当您调用函数时,它运行到完成,然后控制返回到调用它的位置。(在大多数JavaScript环境中,您甚至不必担心多线程,因为虽然JavaScript不是单线程语言,但大多数使用它的环境中每个全局环境只使用一个线程,这使生活变得更加简单。)

代码中的问题是异步性。在您的代码中,<代码> sEdPDF < /C> >在<代码>过程结果> /COD>中间不被调用;在对
AddItems
的所有调用完成并返回之后,将在接近结尾时调用它但是,当您调用
AddItems
时,它所做的只是启动一个进程(一个
ajax
请求),然后与运行JavaScript的线程分开异步继续。因此,在所有这些ajax调用之前,
SendPDF
被称为
function AddItems(value, Result) {
    // Return the Deferred that $.ajax gives us
    return $.ajax({
        type: "POST",
        url: '@Url.Action("ProcessTable","TimeSheet",null)',
        data: {
            TimeSheetId: Result,
            BOM_NO: value[0],
            Stock_Code: value[1],
            Stock_Description: value[2],
            Quantity: value[3]
        },
        success: function(data) {
            console.log(data.Result);
        }/*, - Probably don't want this, instead we'll handle
               errors in the calling code
        error: function() {
            console.log("Error");
        }*/
    });
}
function ProcessTable(Result) {
    console.log("Start Table Process");
    var datas = t.rows().data();
    var total = $("#Table tr").length - 1;
    // Remember the promises from AddItems in an array
    var promises = [];
    for (var i = 0; i < total; i++) {
        var value = datas[i];
        promises.push(AddItems(value, Result));
    }
    // Wait until they're all resolved...
    $.when.apply($, promises).then(
        function() {
            // ...and then call SendPDF
            SendPDF(Result);
        },
        function() {
            // At least one of the ajax calls failed, handle it
        }
    );
}