2016-02-17 2 views
0

У меня есть программа, которая вызывает функцию в javascript с 1 o более запросов к 1 сервлету, я хочу выполнить запрос после запроса и получить ответ после каждого выделения, чтобы сделать это имеют 1 функцию, но она показывает результат только после выполнения всех запросов.Обновление текстового поля после получения ответа от сервлета в javascript

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 (response); внутри области успеха он показывает прогресс шаг за шагом и отлично работает, но он показывает предупреждения, которые я не хочу.

Это я хочу http://imgur.com/a/9nclR, но я получаю только последнее изображение.

+1

Есть ли какие-либо причине у вас есть 'асинхронные: false'? Это обычно считается плохой практикой и даже [устарело в jQuery 1.8+] (http://api.jquery.com/jQuery.ajax/) – neilsimp1

+0

Да, если я установил async как true, запросы будут отображаться после завершения мой цикл, из которого я вызываю функцию, выполняет CMD. Таким образом, ответ будет отображаться одновременно. – Jebus

+0

Не уверен, но я думаю, что проблема также может быть переменной «progress». Как вы его устанавливаете? Это текущее значение для установки в строке выполнения или функции обратного вызова? – michael

ответ

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' 
      }); 
     }); 
    } 
Смежные вопросы