Javascript 在迭代ajax调用中,只显示最后一个响应。为什么?
在JavaEE应用程序中,我有以下单击功能Javascript 在迭代ajax调用中,只显示最后一个响应。为什么?,javascript,jquery,ajax,jakarta-ee,servlets,Javascript,Jquery,Ajax,Jakarta Ee,Servlets,在JavaEE应用程序中,我有以下单击功能 function calculateK() { var matD = "" + $('.dr1c1').val() + "__" + $('.dr1c2').val() + "__" + $('.dr1c3').val() + "__" + $('.dr2c1').val() + "__" + $('.dr2c2').val() + "__" + $('.dr2c3').val() + "__
function calculateK() {
var matD = "" + $('.dr1c1').val() + "__" + $('.dr1c2').val() + "__" + $('.dr1c3').val()
+ "__" + $('.dr2c1').val() + "__" + $('.dr2c2').val() + "__" + $('.dr2c3').val()
+ "__" + $('.dr3c1').val() + "__" + $('.dr3c2').val() + "__" + $('.dr3c3').val();
var h = '5';
var it = 0;
var cellB = '';
var cellJ = '';
var cellK = '';
for (it = 1; it < 5; it++) {
cellB = '.b' + it;
cellJ = '.jc' + it;
cellK = '.k' + it;
var bb1 = $(cellB + 'r1c1').val();
var bb2 = $(cellB + 'r1c2').val();
var bb3 = $(cellB + 'r2c1').val();
var bb4 = $(cellB + 'r2c2').val();
var bb5 = $(cellB + 'r3c1').val();
var bb6 = $(cellB + 'r3c2').val();
var jj = $(cellJ).val();
$.ajax({
url: '/M08CDECUStructuralOptimiser/ServletMatrix1?action=calculateJ',
data: {matrixB: "" + bb1 + "__" + bb2 + "__" + bb3 + "__" + bb4 + "__" + bb5 + "__" + bb6, matrixD: matD, valJ: jj},
dataType: "json",
success: function(response) {
$(cellK+'1').val(response[0]);
$(cellK+'2').val(response[1]);
$(cellK+'3').val(response[2]);
$(cellK+'4').val(response[3]);
$(cellK+'5').val(response[4]);
$(cellK+'6').val(response[5]);
$(cellK+'7').val(response[6]);
$(cellK+'8').val(response[7]);
$(cellK+'9').val(response[8]);
}
});
}
}
函数calculateK(){
var matD=“”+$('.dr1c1').val()+“+$('.dr1c2').val()+“+”('.dr1c3').val()
+“uu”+$('.dr2c1').val()+”uu“+$('.dr2c2').val()+“uuu”+$('.dr2c3').val()
+“uu“+$('.dr3c1').val()+”uu“+$('.dr3c2').val()+“uu“+$('.dr3c3').val();
var h='5';
var it=0;
var cellB='';
var-cellJ='';
var-cellK='';
for(it=1;it<5;it++){
cellB='.b'+它;
cellJ='.jc'+它;
cellK='.k'+它;
var bb1=$(cellB+'r1c1').val();
var bb2=$(cellB+'r1c2').val();
var bb3=$(cellB+'r2c1').val();
var bb4=$(cellB+'r2c2').val();
var bb5=$(cellB+'r3c1').val();
var bb6=$(cellB+'r3c2').val();
var jj=$(cellJ.val();
$.ajax({
url:“/m08cdecucturalOptimizer/ServletMatrix1?action=calculateJ”,
数据:{matrixB:“+bb1+”、“+bb2+”、“+bb3+”、“+bb4+”、“+bb5+”、“+bb6,matrixD:matD,valJ:jj},
数据类型:“json”,
成功:功能(响应){
$(cellK+'1').val(响应[0]);
$(cellK+'2').val(响应[1]);
$(cellK+'3').val(响应[2]);
$(cellK+'4').val(响应[3]);
$(cellK+'5').val(响应[4]);
$(cellK+'6').val(响应[5]);
$(cellK+'7').val(响应[6]);
$(cellK+'8').val(响应[7]);
$(cellK+'9').val(响应[8]);
}
});
}
}
在servlet上
try {
if (action.compareTo("calculateJ") == 0) {
String matrixStringB = request.getParameter("matrixB");
String[] tempStringArray;
tempStringArray = matrixStringB.split("__");
double[][] array = {{Double.parseDouble(tempStringArray[0]), Double.parseDouble(tempStringArray[1])},
{Double.parseDouble(tempStringArray[2]), Double.parseDouble(tempStringArray[3])},
{Double.parseDouble(tempStringArray[4]), Double.parseDouble(tempStringArray[5])}};
Matrix b = new Matrix(array);
Matrix bT = b.transpose();
Matrix c = b.times(bT);
//System.out.println(Arrays.deepToString(c.getArray()));
String matrixStringD = request.getParameter("matrixD");
String[] tempStringArray2;
tempStringArray2 = matrixStringD.split("__");
double[][] arrayD = {{Double.parseDouble(tempStringArray2[0]), Double.parseDouble(tempStringArray2[1]), Double.parseDouble(tempStringArray2[2])},
{Double.parseDouble(tempStringArray2[3]), Double.parseDouble(tempStringArray2[4]), Double.parseDouble(tempStringArray2[5])},
{Double.parseDouble(tempStringArray2[6]), Double.parseDouble(tempStringArray2[7]), Double.parseDouble(tempStringArray2[8])}};
Matrix d = new Matrix(arrayD);
Matrix r1 = c.times(d);
String matrixStringJ = request.getParameter("valJ");
double valj = Double.parseDouble(matrixStringJ);
Matrix r2 = r1.times(valj);
double valh = 1.5;
Matrix r3 = r2.times(valh);
double[][] resultArray = r3.getArray();
double[] oneDArray = new double[resultArray.length * resultArray.length];
//Flatten 2D array to 1D array...
int s = 0;
for (int i = 0; i < resultArray.length; i++) {
for (int j = 0; j < resultArray.length; j++) {
oneDArray[s] = resultArray[i][j];
s++;
}
}
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(oneDArray);
//System.out.println(oneDArray.length);
System.out.println(Arrays.deepToString(r3.getArray()));
out.println(json);
}
} finally {
}
试试看{
if(action.compareTo(“calculateJ”)==0){
字符串MatrixString=request.getParameter(“matrixB”);
字符串[]tempStringArray;
tempStringArray=matrixStringB.split(“u”);
double[]array={{double.parseDouble(tempStringArray[0]),double.parseDouble(tempStringArray[1]),
{Double.parseDouble(tempStringArray[2]),Double.parseDouble(tempStringArray[3]),
{Double.parseDouble(tempStringArray[4]),Double.parseDouble(tempStringArray[5])};
矩阵b=新矩阵(阵列);
矩阵bT=b.转置();
矩阵c=b.次(bT);
//System.out.println(Arrays.deepToString(c.getArray());
字符串matrixStringD=request.getParameter(“matrixD”);
字符串[]tempStringArray2;
tempStringArray2=matrixStringD.split(“u”);
double[]arrayD={{double.parseDouble(tempStringArray2[0]),double.parseDouble(tempStringArray2[1]),double.parseDouble(tempstringarrary2[2]),
{Double.parseDouble(tempStringArray2[3]),Double.parseDouble(tempStringArray2[4]),Double.parseDouble(tempStringArray2[5]),
{Double.parseDouble(tempStringArray2[6])、Double.parseDouble(tempStringArray2[7])、Double.parseDouble(tempStringArray2[8])};
矩阵d=新矩阵(arrayD);
矩阵r1=c乘以(d);
字符串matrixStringJ=request.getParameter(“valJ”);
double valj=double.parseDouble(matrixStringJ);
矩阵r2=r1.次(valj);
双谷=1.5;
矩阵r3=r2.次(valh);
double[]resultArray=r3.getArray();
double[]oneDArray=新的double[resultaray.length*resultArray.length];
//将二维阵列展平为一维阵列。。。
int s=0;
for(int i=0;i
现在,在控制台上,我得到了所有4个数组和正确的值,但在站点上,只有最后一个k值显示k41、k42、…k49
如何解决这个问题
当我尝试将js循环作为limit it时,ajax调用是异步的,因此当它收到服务器的响应时,变量
cellB
,cellK
,cellK
的值已经在循环中更改。
解决方案是在调用函数doAjaxCall
时,在函数内部添加调用,如下例所示
function calculateK() {
var matD = "" + $('.dr1c1').val() + "__" + $('.dr1c2').val() + "__" + $('.dr1c3').val()
+ "__" + $('.dr2c1').val() + "__" + $('.dr2c2').val() + "__" + $('.dr2c3').val()
+ "__" + $('.dr3c1').val() + "__" + $('.dr3c2').val() + "__" + $('.dr3c3').val();
var h = '5';
var it = 0;
var cellB = '';
var cellJ = '';
var cellK = '';
for (it = 1; it < 5; it++) {
cellB = '.b' + it;
cellJ = '.jc' + it;
cellK = '.k' + it;
doAjaxCall(cellB, cellJ, cellK);
}
}
function doAjaxCall(cellB, cellJ, cellK){
var bb1 = $(cellB + 'r1c1').val();
var bb2 = $(cellB + 'r1c2').val();
var bb3 = $(cellB + 'r2c1').val();
var bb4 = $(cellB + 'r2c2').val();
var bb5 = $(cellB + 'r3c1').val();
var bb6 = $(cellB + 'r3c2').val();
var jj = $(cellJ).val();
$.ajax({
url: '/M08CDECUStructuralOptimiser/ServletMatrix1?action=calculateJ',
data: {matrixB: "" + bb1 + "__" + bb2 + "__" + bb3 + "__" + bb4 + "__" + bb5 + "__" + bb6, matrixD: matD, valJ: jj},
dataType: "json",
success: function(response) {
$(cellK+'1').val(response[0]);
$(cellK+'2').val(response[1]);
$(cellK+'3').val(response[2]);
$(cellK+'4').val(response[3]);
$(cellK+'5').val(response[4]);
$(cellK+'6').val(response[5]);
$(cellK+'7').val(response[6]);
$(cellK+'8').val(response[7]);
$(cellK+'9').val(response[8]);
}
});
}
函数calculateK(){
var matD=“”+$('.dr1c1').val()+“+$('.dr1c2').val()+“+”('.dr1c3').val()
+“uu”+$('.dr2c1').val()+”uu“+$('.dr2c2').val()+“uuu”+$('.dr2c3').val()
+“uu“+$('.dr3c1').val()+”uu“+$('.dr3c2').val()+“uu“+$('.dr3c3').val();
var h='5';
var it=0;
var cellB='';
var-cellJ='';
var-cellK='';
for(it=1;it<5;it++){
cellB='.b'+它;
cellJ='.jc'+它;
cellK='.k'+它;
doAjaxCall(cellB,cellJ,cellK);
}
}
函数调用(cellB、cellJ、cellK){
var bb1=$(cellB+'r1c1').val();
var bb2=$(cellB+'r1c2').val();
var bb3=$(cellB+'r2c1').val();
var bb4=$(cellB+'r2c2').val();
var bb5=$(cellB+'r3c1').val();
var bb6=$(cellB+'r3c2').val();
var jj=$(cellJ.val();
$.ajax({
url:“/m08cdecucturalOptimizer/ServletMatrix1?action=calculateJ”,
数据:{matrixB:“+bb1+”_uu“+bb2+”_u“+bb3+”_u“+bb4”
function calculateK() {
var matD = "" + $('.dr1c1').val() + "__" + $('.dr1c2').val() + "__" + $('.dr1c3').val()
+ "__" + $('.dr2c1').val() + "__" + $('.dr2c2').val() + "__" + $('.dr2c3').val()
+ "__" + $('.dr3c1').val() + "__" + $('.dr3c2').val() + "__" + $('.dr3c3').val();
var h = '5';
var it = 0;
var cellB = '';
var cellJ = '';
var cellK = '';
for (it = 1; it < 5; it++) {
cellB = '.b' + it;
cellJ = '.jc' + it;
cellK = '.k' + it;
doAjaxCall(cellB, cellJ, cellK);
}
}
function doAjaxCall(cellB, cellJ, cellK){
var bb1 = $(cellB + 'r1c1').val();
var bb2 = $(cellB + 'r1c2').val();
var bb3 = $(cellB + 'r2c1').val();
var bb4 = $(cellB + 'r2c2').val();
var bb5 = $(cellB + 'r3c1').val();
var bb6 = $(cellB + 'r3c2').val();
var jj = $(cellJ).val();
$.ajax({
url: '/M08CDECUStructuralOptimiser/ServletMatrix1?action=calculateJ',
data: {matrixB: "" + bb1 + "__" + bb2 + "__" + bb3 + "__" + bb4 + "__" + bb5 + "__" + bb6, matrixD: matD, valJ: jj},
dataType: "json",
success: function(response) {
$(cellK+'1').val(response[0]);
$(cellK+'2').val(response[1]);
$(cellK+'3').val(response[2]);
$(cellK+'4').val(response[3]);
$(cellK+'5').val(response[4]);
$(cellK+'6').val(response[5]);
$(cellK+'7').val(response[6]);
$(cellK+'8').val(response[7]);
$(cellK+'9').val(response[8]);
}
});
}