2011-10-19 8 views
0

jQueryを使用して、ajaxを使用すると、URLをポーリングしてタイムアウトまたは正常に戻るjavascriptプロセスの作業モデルが得られます。 URLはローカルのhttpdを持つ小さな埋め込みボックスによって処理されます。javascript:let's share control

PHPスクリプトで再起動が発生し、1秒待ってからjavascriptコードに入ります。

ajax getを開始する前に、サーバーhttpdが実際にシャットダウンしたことを確認するまで(約90秒)待つ必要があります。そうでなければ、私たちのアンケートはうまくいくでしょう。そして、サーバーが死んだら、私たちのWebページはクラッシュします。

私は数多くのアイデアを試しています。残念ながら、待機はモーダルでなければなりません。タイムアウトするまで何も起こらないはずです。動作すると思われるのは、単純なsleep()抽象化です:

function sleep(milliseconds) 
{ 
    var start = new Date().getTime(); 
    for (var i = 0; i < 1e7; i++) 
    { 
     if ((new Date().getTime() - start) > milliseconds) 
     { 
      break; 
     } 
    } 
} 

i = 0; 
var cText=''; 
for (i = 0; i < 90; i++) 
{ 
    sleep(1000); 
    cText=cText+'.'; 
    $("#waitmessage").html(MakeFlushable(cText)); 
} 
$.ajaxSetup(... 

残念ながら、これはブラウザによって異なる動作をします。 30秒後IEがクラッシュします。 Mozilla(8)はapoplecticになり、最終的にajaxが完了すると回復します。

ブラウザに何らかの応答(何かの形で)が必要だと思って、divにドットを書き込もうとしました。 ajaxイベントが完了するまで、ブラウザ出力はありません。次に、各ドットに\ n文字(4000個)の文字を追加しようとしました(MakeFlushable()はこれを行います)。それでも、ajaxが完了するまでは点は表示されません。

昔は、「ビジュアルオブジェクト」と呼ばれる4glがありました。これは、他のハウスキーピングタスクを実行するために「エンジン」に制御を戻す方法を提供しました。おそらくこれがこの場合に必要なことでしょうか? 「すべてのハウスキーピングをしてから、コントロールを返す」というJavaScriptコールがありますか?私の推測では、javascriptがタイトなループで立ち往生しているので、div HTMLがブラウザに送信されないということです...

+0

あなたが代わりのsetTimeoutで(スリープ後に実行するはずのコード)を置くことができませんでしたか? –

+0

@AndreBacklundはい、それは解決策のようです。提案していただきありがとうございます。 –

答えて

0

なぜsetTimeoutまたはsetIntervalを使用してタイミングを処理しませんか?
コールバックメソッドでajaxの処理を行います。

のような何か:

var SecondsToWait = 90; 

var secInterval = setInterval(oneSecIntervalHandler,1000); 

function oneSecIntervalHandler() { 
    if (--SecondsToWait > 0) { 
     $("#waitmessage").html($("#waitmessage").html() + '.'); 
    } else { 
     clearInterval(secInterval); 
     //doAjaxStuffNow 
     $("#waitmessage").html("doAjaxStuffNow...<br/>$.ajaxSetup(..."); 
    } 

} 

jsfiddle:http://jsfiddle.net/qSwyQ/

+0

鮮やかなビットのコードです。いずれの場合も(setInterval()またはsetTimeout()ハンドラを使用)、スクリプトは実行をPHPの以下の項目に戻し続けます。だから私は待機プロセスの後に終了するようにスクリプトを修正しました。それは動作するか、または壊れます...ありがとう!! –

1

JavaScriptでスレッドをマルチすることはできません。したがって、no "sleep" functionがあるので、上記のスクリプトは継続的に実行されています。そのため、IEがクラッシュしています。

代わりに、setTimeoutを使用してみてください:

setTimeout(function(){ 
    // code to run after 1000ms 
}, 1000);