在javascript中获取来自servlet的响应后更新textarea

时间:2016-02-17 19:30:17

标签: javascript ajax post synchronous

我有一个程序在javascript中调用一个函数,对1个servlet有1个以上的请求,我想在请求后执行请求并在每次执行后得到响应,为了使这个我有1个函数,但它只显示所有请求都已执行后的结果。

function cmd(args) {
    width = 0;
    var res = args.split('\n');
    var largo = res.length;
    var progressLength = 100 / largo;
    for (var i = 0; i < largo; i++)
    {
        if (res[i] == 'desconectar')
        {
            desconectar();
            break;
        }
        else
        {
            executeCMD(res[i]);

        }
    }
}
function executeCMD(args)
{
    $.ajax({
        type: "POST",
        url: 'Controlador',
        data: {cmd: args, operacion: 1},
        success: function (response) {
            document.getElementById('respuesta').value = document.getElementById('respuesta').value + response;
        },
        dataType: 'text',
        async: false
    });
}

如果我添加window.alert(响应);内部成功领域它逐步显示进度并且工作正常,但它显示我不想要的警报。

这是我想http://imgur.com/a/9nclR,但我只获得最后一张照片。

1 个答案:

答案 0 :(得分:0)

解决方案是否有人在使用递归函数作为下一个:

function cmd(args) {
width = 0;
move(0);
var res = args.split('\n');
var largo = res.length;
var valInit = 0;
if (largo > valInit)
{
    executeCMD(res, valInit);
}
}


function executeCMD(args, i)
{
     $(document).ready(function () {
            $.ajax({
                type: "POST",
                url: 'ControladorServlet',
                data: {cmd: args[i], operacion: 1, ticket: ticket, iddispositivo: sesion},
                success: function (response) {
                    var textarea = document.getElementById('respuesta');
                    var res = response.trim().split('\n');
                    if(error){//dc}
                    else
                    {
                        document.getElementById('respuesta').value = document.getElementById('respuesta').value + response.trim() + "\n\n";
                        var valor = (100) * (i + 1) / args.length;
                        move(valor);
                        if (i + 1 < args.length)
                        {
                            executeCMD(args, i + 1);
                        }
                    }
                },
                dataType: 'text'
            });
        });
    }