2016-05-17 34 views
0

在下面的代碼的API execute_wc叫,接着調用遞歸函數poll_results和返回時,纔會有一個狀態!= 1。現在,當功能poll_results被稱爲是異步的,因此if else條件submit_stat不executed.how來處理這種情況的jQuery做同步調用和執行

function submit_stat(){ 
    var poll_status = ''; 
    $.post("/reports/execute_wc/", snddata, 
    function callbackHandler(data, textstatus) 
    { 
     console.log('got response'); 
     if (data.status == 0) 
     { 
      poll_status = poll_results(); 
      if (poll_status == 1){ 

      } 
      else if(poll_status == 0) 
      { 
       alert('Error while processing data.Please check input files'); 
      } 
     } 
     else if (data.status == 1) 
     { 
       alert('Error while processing data'); 
     } 
    }, 
    "json" 
    ); 
} 

function poll_results(){ 
    $.post('/reports/poll_wcstatus/', function(data) { 
    if(data.wce_status == 1){ 
     return setTimeout(poll_results,5000); 
    } 
    else if (data.wce_status != 1 || data.wce_status != 3) 
    { 
     alert('return 1'); 
     return 1; 
    } 
    else 
    { 
     alert('return 0'); 
     return 0; 
    } 
    }); 
} 

編輯1:

function poll_results(callback){ 
    var callback=''; 
    $.post('/reports/poll_wcstatus/', function(data) { 
    //alert(data); // process results here 
    console.log(data); 
    console.log(data.wce_status); 
    if(data.wce_status == 1){ 
     return setTimeout(poll_results,5000); 
    } 
    else if (data.wce_status != 1 || data.wce_status != 3){ 
     alert('return 1'); 
     //return 1; 
     callback(1); 
    } 
    else //3 is fatal error shoul 
    { 
     alert('return 0'); 
     callback(0); 
     //return 0; 
    } 
}); 
} 



$.post("/reports/execute_wc/", snddata, 
    function callbackHandler(data, textstatus) 
    { 
     console.log('got response'); 
     if (data.status == 0) 
     { 
      alert('starting script'); 
      //poll_status = poll_results(); 
      poll_results(function(poll_status){ 
       if (poll_status == 1){ 
        alert('Content extratcted.Please download the results file'); 
        $('#loading').hide(); 
        $('#downloadfile').show(); 
        $('#downloadfile').html('').append('<a href="'+ data.url +'">Download output</a>'); 
       } 
       else if(poll_status == 0) 
       { 
        $('#loading').hide(); 
        alert('Error while processing data.Please check input files'); 
       } 
      }); 
     } 
     else if (data.status == 1) 
     { 
      $('#loading').hide(); 
      alert('Error while processing data'); 
     } 
    }, 
    "json" 
    ); 
+0

您可以在調用poll_results時使用回調函數。 – MacMac

+0

可以舉一個例子 – Rajeev

回答

0

您可以使用回調函數。下面的示例

function submit_stat(){ 
    var poll_status = ''; 
    $.post("/reports/execute_wc/", snddata, 
    function callbackHandler(data, textstatus) 
    { 
     console.log('got response'); 
     if (data.status == 0) 
     { 
      poll_results(function(poll_status){ //pass a function definition as a parameter to your another function, this is called callback function 
      if (poll_status == 1){ 

      } 
      else if(poll_status == 0) 
      { 
       alert('Error while processing data.Please check input files'); 
      } 
      }); 

     } 
     else if (data.status == 1) 
     { 
       alert('Error while processing data'); 
     } 
    }, 
    "json" 
    ); 
} 

function poll_results(callback){ //here callback variable holds a function within it 
    $.post('/reports/poll_wcestatus/', function(data) { 
    if(data.wce_status == 1){ 
     return setTimeout(poll_results,5000); 
    } 
    else if (data.wce_status != 1 || data.wce_status != 3) 
    { 
     alert('return 1'); 
     callback(1); //execute the callback function 
    } 
    else 
    { 
     alert('return 0'); 
     callback(0); //execute the callback function 
    } 
    }); 
} 
+0

@Rajeev我給瞭解決方案..請參閱代碼中的註釋..我指出了更改 –

+0

嗨得到一個錯誤(索引):219 Uncaught TypeError:回調不是函數 – Rajeev

+0

當然你已經做了所有必要的改變? –

0

爲了以異步方式接收數據,您需要使用回調。將函數添加到poll_results,並在異步調用完成時傳遞數據。

function submit_stat(){ 
    var poll_status = ''; 
    $.post("/reports/execute_wc/", snddata, 
    function callbackHandler(data, textstatus) 
    { 
     console.log('got response'); 
     if (data.status == 0) 
     { 
      poll_results(function(poll_status) 
      { 
       if (poll_status == 1){ 

       } 
       else if(poll_status == 0) 
       { 
        alert('Error while processing data.Please check input files'); 
       } 
      }); 
     } 
     else if (data.status == 1) 
     { 
       alert('Error while processing data'); 
     } 
    }, 
    "json" 
    ); 
} 

function poll_results(callback){ 
    $.post('/reports/poll_wcstatus/', function(data) { 
    if(data.wce_status == 1){ 
     return setTimeout(poll_results,5000); 
    } 
    else if (data.wce_status != 1 || data.wce_status != 3) 
    { 
     callback(1); 
    } 
    else 
    { 
     callback(0); 
    } 
    }); 
} 
+0

哈哈我們是時間旅行者嗎? :D –

+0

也許時間旅行確實存在。 – MacMac

+0

哈哈是的,而我現在只是做... –