我有一個使用ajax post方法和dataTables的程序。擺弄了幾個星期後,我確定我根本不明白javascript是如何工作的。 這裏是我的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();
}
});
}
我一直有麻煩的是,在程序執行中ProcessTable功能的中間SendPDF功能。我試圖通過使用if語句來阻止它,但它仍然執行。
如果你知道如何解決我的代碼,太棒了。但是,如果你能解釋javascript如何執行函數,並且按照什麼順序。以及如何控制該訂單。那太好了。
我不認爲這與JS具體有什麼關係,因爲afaik,JS中的函數調用與其他語言中的調用相同。這聽起來更像是一個同步/異步的誤解。 – Carcigenicate
我不明白你遇到的問題是什麼。 '我遇到的麻煩是程序正在執行ProcessTable函數中間的Send pdf函數.'。你可以從'ProcessTable'調用'SendPDF',所以我希望它可以運行。有什麼問題? – Carcigenicate
你的問題是調用'AddItems(value,Result);'在你的'ProcessTable'函數中,在所有'AddItems'調用之前循環都會完成。 – LGSon