私は、ポストメソッドとデータテーブルを使用するプログラムを持っています。数週間の試練の後、私は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の関数呼び出しは他のすべての言語と同じように機能するので、これは特にJSとは関係ないと思います。これは、同期/非同期の誤解のように聞こえる。 – Carcigenicate
そして私はあなたが持っている問題が何かを理解していません。 '問題は、プログラムがProcessTable関数の途中でSend関数を実行していることです。あなたは 'ProcessTable'から' SendPDF'を呼び出しているので、実行すると思います。どうしたの? – Carcigenicate
あなたの問題はあなたの 'ProcessTable'関数で' AddItems(value、Result);を呼び出しています。ここでループはすべての 'AddItems'呼び出しの前に行われます。 – LGSon