Javascript 在迭代ajax调用中,只显示最后一个响应。为什么?

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() + "__

在JavaEE应用程序中,我有以下单击功能

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]);


                }
            });
}