javascript - 在循环中调用 ajax,它不会执行 2 次
问题描述
我正在处理一个 MVC 项目,在一个视图中我需要一个脚本来进行 Ajax 调用以进行计算,我有 N(最多 5 个)对象要填充,每次我运行脚本时,都会有一个循环重复 N 次对象很多,但是,在 Ajax 调用时,循环重新开始,变量在所有代码执行之前递增,
我会向您展示代码,如果没有正确执行,请见谅:
function TestFunction(c) {
for (var k = 0; k < @TempData["num_bal_simu"]; k++) {
var newvalue = c.getElementsByClassName("valuesheet")[0].value;
var testAttribute = c.getElementsByClassName("valuesheet")[0];
var getNameAttributeReplace = testAttribute.getAttribute('name').split(".");
var array = testAttribute.id.split("_");
indexbalancesheetFor = array[4];
var indiceBalanceSheet = parseInt(getNameAttributeReplace[0][getNameAttributeReplace[0].length - 2]);
stringa = "SimulatedBalance" + "Input" + "_" + "0";
if (indiceBalanceSheet == 0 && k == 0) {
var valueDropDownMode = document.getElementById(testAttribute.getAttribute('name')).value;
}
else {
var newstr = getNameAttributeReplace[0].replace(indiceBalanceSheet,'0');
var getAttributeNameModify = newstr + "." + getNameAttributeReplace[1] + "." + getNameAttributeReplace[2] + "." + getNameAttributeReplace[3];
var valueDropDownMode = document.getElementById(getAttributeNameModify).value;
}
if (indiceBalanceSheet == 0 && k == 0) {
var testAttribute2 = c.getElementsByClassName("valuesheet")[0].name;
var last_value = document.getElementById(testAttribute2).value;
}
else {
var newstr = getNameAttributeReplace[0].replace(indiceBalanceSheet, '0');
var testAttribute2 = newstr + "." + getNameAttributeReplace[1] + "." + getNameAttributeReplace[2] + "." + getNameAttributeReplace[3];
var counter = k - 1;
previousBalanceValue = document.getElementById("SimulatedBalance" + "_" + counter + "__" + "BalanceSheetIncome" + "_" + indexbalancesheetFor + "__Value_Hidden").value;
var last_value = previousBalanceValue;
}
if (antevalue != newvalue) {
var valuepunto = parseFloat(last_value.replace(",", "."));
switch (valueDropDownMode) {
case '0':
var val0 = (valuepunto * newvalue) / 100;
last_value = valuepunto + val0;
last_value.toString().replace('.', ',');
break;
case '1':
newvalue = newvalue.replace(",", ".");
last_value = parseFloat(valuepunto) + parseFloat(newvalue);
last_value = last_value.toString().replace('.', ',');
break;
case '2': last_value = newvalue;
default:
break;
}
c.getElementsByClassName("hiddenvalueprospect")[0].value = last_value;
var myRows = [];
var headersText = [];
var $headers = $("th");
var GeneralSheet = [];
var contenent = document.getElementById(document.getElementById("TabSelect").value);
var tableload = contenent.getElementsByClassName("table-balance")[0];
var schema = tableload.getElementsByClassName("VersionClass")[0].value;
var prospetto = tableload.getElementsByClassName("ProspectClass")[0].value;
var tBody = tableload.getElementsByTagName('tbody')[0];
var tableRow = tBody.getElementsByTagName('tr');
var $rows = $(tableRow).each(function (index) {
var test1 = new Object();
$cells = $(this).find("td");
myRows[index] = {};
$cells.each(function (cellIndex) {
// Set the header text
if (headersText[cellIndex] === undefined) {
headersText[cellIndex] = $($headers[cellIndex]).text();
}
if (cellIndex == 1) {
myRows[index][headersText[cellIndex]] = $(this).text();
test1["descrizione"] = $(this).text();
}
if (cellIndex == 0) {
test1["codice"] = $(this).find('input').val();
}
// Update the row object with the header/cell combo
if (k == 0) {
if ($cells[cellIndex].id == "SimulatedBalanceInput_0") {
myRows[index][headersText[cellIndex]] = $(this).find('input:hidden').val();
test1["importo"] = $(this).find('input:hidden').val();
}
}
if (k == 1) {
if ($cells[cellIndex].id == "SimulatedBalanceInput_1") {
myRows[index][headersText[cellIndex]] = $(this).find('input:hidden').val();
test1["importo"] = $(this).find('input:hidden').val();
}
}
if (k == 2) {
if ($cells[cellIndex].id == "SimulatedBalanceInput_2") {
myRows[index][headersText[cellIndex]] = $(this).find('input:hidden').val();
test1["importo"] = $(this).find('input:hidden').val();
}
}
if (k == 3) {
if ($cells[cellIndex].id == "SimulatedBalanceInput_3") {
myRows[index][headersText[cellIndex]] = $(this).find('input:hidden').val();
test1["importo"] = $(this).find('input:hidden').val();
}
}
if (k == 4) {
if ($cells[cellIndex].id == "SimulatedBalanceInput_4") {
myRows[index][headersText[cellIndex]] = $(this).find('input:hidden').val();
test1["importo"] = $(this).find('input:hidden').val();
}
}
if (k == 5) {
if ($cells[cellIndex].id == "SimulatedBalanceInput_5") {
myRows[index][headersText[cellIndex]] = $(this).find('input:hidden').val();
test1["importo"] = $(this).find('input:hidden').val();
}
}
});
GeneralSheet.push(test1);
});
// Let's put this in the object like you want and convert to JSON (Note: jQuery will also do this for you on the Ajax request)
var GeneralBalance = {
"schema": schema,
"prospetto": prospetto,
"row": GeneralSheet
};
var balance = JSON.stringify(GeneralBalance);
if (balance != null) {
$.ajax({
url: "/api/APIBalance/PostBalance",
dataType: "json",
async: false,
type: "POST",
data: { "": balance },
success: function (a) {
var obj = JSON.parse(a);
var myRows2 = [];
var headersText2 = [];
var $headers2 = $("th");
var i = 0;
var contenent = document.getElementById(document.getElementById("TabSelect").value);
var tableload = contenent.getElementsByClassName("table-balance")[0];
var tBody = tableload.getElementsByTagName('tbody')[0];
var tableRow = tBody.getElementsByTagName('tr');
// Loop through grabbing everything
var $rows2 = $(tableRow).each(function (index2) {
$cells2 = $(this).find("td");
myRows2[index2] = {};
$cells2.each(function (cellIndex2) {
// Set the header text
if (headersText2[cellIndex2] === undefined) {
headersText2[cellIndex2] = $($headers2[cellIndex2]).text();
}
// Update the row object with the header/cell combo
if (k == 0) {
if ($cells2[cellIndex2].id == "valueSimulated_0") {
$(this).find('input').val(obj[i].importo);
}
}
if (k == 1) {
if ($cells2[cellIndex2].id == "valueSimulated_1") {
$(this).find('input').val(obj[i].importo);
}
}
if (k == 2) {
if ($cells2[cellIndex2].id == "valueSimulated_2") {
$(this).find('input').val(obj[i].importo);
}
}
if (k == 3 ) {
if ($cells2[cellIndex2].id == "valueSimulated_3") {
$(this).find('input').val(obj[i].importo);
}
}
if (k == 4) {
if ($cells2[cellIndex2].id == "valueSimulated_4") {
$(this).find('input').val(obj[i].importo);
}
}
if (k == 5) {
if ($cells2[cellIndex2].id == "valueSimulated_5") {
$(this).find('input').val(obj[i].importo);
}
}
if (k == 0) {
if ($cells2[cellIndex2].id == "valueSimulated_0") {
$(this).find(':hidden').val(obj[i].importo);
}
}
if (k == 1 ) {
if ($cells2[cellIndex2].id == "valueSimulated_1") {
$(this).find(':hidden').val(obj[i].importo);
}
}
if ( k == 2) {
if ($cells2[cellIndex2].id == "valueSimulated_2") {
$(this).find(':hidden').val(obj[i].importo);
}
}
if ( k == 3) {
if ($cells2[cellIndex2].id == "valueSimulated_3") {
$(this).find(':hidden').val(obj[i].importo);
}
}
if ( k == 4) {
if ($cells2[cellIndex2].id == "valueSimulated_4") {
$(this).find(':hidden').val(obj[i].importo);
}
}
if ( k == 5) {
if ($cells2[cellIndex2].id == "valueSimulated_5") {
$(this).find(':hidden').val(obj[i].importo);
}
}
});
i++;
});
}
})
}
}
for循环包含了整个脚本,我在互联网上读到只是通过输入使调用非异步async: false
但这没有用,我已经卡在这里好几天了,请我需要帮助
解决方案
推荐阅读
- wavefront - 波前材料文件是否需要指定所有颜色类型,还是只能使用一种?
- python - 设置密集层以从一维数组中学习
- python - 在多台服务器上部署项目,没有任何库冲突
- asp.net - '程序或函数'GenerateTest'需要参数'@questionnaireID',但未提供。'
- c# - 启动错误被吞下,怎么看?
- java - 映射实体,作为 Map 值列出。通过 JDBC 语句执行 DDL “drop table if exists `single_line`”时出错
- python - 使用 like 和 any_ 打印编译的 sqlalchemy 语句会产生 NULL 参数
- css - 有没有办法用 :checked 伪类覆盖媒体查询?
- ruby - Ruby如何使用特定字符屏蔽用户输入?
- twitter - Count twurl's retrieved tweets with a specific hashtags