2016-05-19 17 views
1

私は、Internet Explorer 8(ご存じのように、HELLと互換性があります)と互換性が必要なWebアプリケーションを作成しています。問題は、後でPHPコードで処理され、ページを更新するファイルをアップロードしていることです。私は処理されたファイルを持っているので、テーブルにデータを挿入するためにそのファイルを使用したので、このデータを挿入している間にプロセスバーとUIをブロックする必要があります(各行に対して別のPHPプロセスを呼び出す必要があります)。ドキュメントの準備UIをブロックする

問題は次に、私はそのUIをブロックしたい、私はロジックとすべての互換性の問題を解決している、 5日間の作業後はUIをブロックできません。これは、アイデアを簡単にするために最低限のコード(私たちが必要とするすべてをカプセル化している)である:

明らか
$(document).ready({ 
    (...) 
     $("#title").html('some text'); 
     $("#bar").html(''); 
     $.blockUI({message: $('#window'),css:{width:'303px'}}); 
     go = true; 
     while (go){ 
      $.ajax({<ASYNC FALSE AJAX CALL}); 
      if (!file.lines) go = false; 
      <update progress> 
     } 

     $.unblockUI(); 
    (...) 
    }); 

$ .blockUIは(私がブロック解除されるまで)メインスレッドをブロックし、パーソナライズされたウィンドウを表示、その必要があります次のコードを持っていることである。

<div id="window" style="display: none; cursor: default"> 
    <div id="title_bar"> 
     <div id="titulos">some text</div> 
     <div id="cerrar"></div> 
    </div> 
    <div id="body"> 
     <img src="an icon" 
      alt="enviando" border="0" width="33" height="33" id="enviar"> 
     <p class="titulo" id='title'></p> 
     <p class="texto" id='bar'></p> 
     <br /> 
    </div> 
</div> 

私は問題は - 私は、メインスレッドではないスレッド上で、そのブロックを実行することだと思う、と私は本当にブロックのUIを傾けます。私はすべての情報を処理するまでユーザを待たせなければならないので、ブロックが必要です。

ありがとう、私はあなたが私を助けてくれることを願っています。

+0

「async:false」を削除してみてください。これを使用することは非常に悪い習慣であり、UIが更新されず、使用している 'blockUI'プラグインに干渉することになります。 –

+0

エラーが発生しました。あなたはフィドルを持っていますか? –

+0

'async:false'を取り除くことはできません。悪い習慣だと思いますが、このコードでは@RoryMcCrossanが必要です。私は何のエラーもありません。開発者コンソールには、async:falseの典型的な警告があります。 –

答えて

1

私は主に同期のためだと思いますが、非同期にするとコードに変更を加える必要があります。 whileループを削除して関数を呼び出すと、非同期呼び出しが行われ、正常終了すると同じ関数が再帰的に呼び出されます。端末の条件が満たされたら、以下のようにUIのブロックを解除してください:

$.blockUI({message: $('#window'),css:{width:'303px'}}); 
// based on the above code I assume you will get file as a response. 
process(); 

function process(file){ 
    if (file && !file.lines){ 
     $.unblockUI(); 
    } 

    $.ajax({<ASYNC TRUE AJAX CALL}) 
     .done(function(file){     
       <update progress> 
       process(file); 
      }); 
} 
+0

さて、どうもありがとうございました。それは完璧なアイデアでした。私は再帰関数については考えなかった。今は正しく動作しています。ありがとう!!!! –

関連する問題