2016-02-17 18 views
0

我有一個程序在javascript中調用一個函數,並向1個servlet發送1個請求,我希望在請求後執行請求並在每次執行完後獲取響應,以使這個I有1個函數,但它只顯示所有請求執行後的結果。在javascript中獲取servlet響應後更新textarea

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

是的,如果我將異步設置爲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' 
      }); 
     }); 
    }