2012-03-16 11 views
1

回以上焼成したとき、私はjavascript関数でファイル/コンテンツをロードするためのjQueryを使用して本部を持っている...実行jsの機能

function DoWork() { 
    // Do Stuff 
} 

のユーザーが本部をリロードして同じことを引き出すことができるとしましょう同じjs関数DoWork()を持つファイル/コンテンツ問題は、ファイルが再ロードされると、以前にロードされた関数DoWork()がまだ実行されていることです。以前に起動したDoWork()を強制終了して再起動するにはどうすればよいですか?

+1

「divをリロードする」とはどういう意味ですか?これはイベントハンドラを介して処理されますか?もしそうなら、なぜ起動したらハンドラをアンバインドしないのですか? (または、jQueryの 'once'のようなものを使用してください) – abesto

+0

元の関数宣言を条件付き' Do(doof型=== '未定義'){関数DoWork(){...}} 'に入れるのが最も簡単です。それがまだ検出されていない場合。 –

+0

'DoWork'の実行間隔はありますか?使用モデルとは何ですか?なぜそれを実行するには時間がかかりますか? –

答えて

3

Javascriptはシングルスレッドなので、ある時点で実行できるのは1つだけです。 DoWorkが既に "実行中"の場合は、a)他のすべてのJSコードをブロックしているか、または終了するまで割り込みコードを実行する方法がないため終了できません。またはb)DoWorkがスケジュールされていますインターバルでsetTimeout()またはsetInterval()経由で発砲する。

後者の場合、setTimeout()setInterval()はIDを返します。そのIDをどこかに保管し、どのように起動したかによってclearTimeout(doWork_timeout_id)またはclearInterval(doWork_interval_id)と呼んでください。

1

setTimeoutを使用する単純な関数を作成すると、DoWorkの各呼び出しで最初に:clearTimeoutが呼び出されます。 setTimeoutでCPUを無駄にするので、私はこのソリューションが本当に気に入らない。 別のオプションは、DoWorkでWebワーカーを使用することです(大規模なデータを別のスレッドで実行している場合に備えて、他にも優れた機能が多数あります)。 DoWork()の作業を開始するたびに実行されます。

0

divのコンテンツを読み込むためにajaxを使用していますか?そうであれば、より良い方法は次のとおりです。

var doWorkAjax=null; 
function DoWork(){ 
    if (doWorkAjax) doWorkAjax.abort(); 
    doWorkAjax = $.ajax(url, data, function(result){ 
     .... 
     doWorkAjax=null; 
    }); 
} 
+0

はいjs関数DoWork()が含まれているDivでphpファイルを読み込むためにAJAXを使用しています。 – Joe