2012-01-05 8 views
2

HTMLコードの次の行に移動する前にJavascript関数が終了するようにする方法。HTMLでJavascript関数の完了を待つ

たとえば:私はmain()にJavascriptコードを持っており、下記のようにthtを呼び出しています。これが終わる前に、JPEGを読み込むようなHTMLコードの次の行がWebブラウザに表示されます。 main()コールが完全に実行されるようにする方法はありますか。あなたの一部として

<script language="JavaScript" type="text/javascript"> main();</script> 

は、私は、ウェブページを形成するために必要な値の一部を取得するXMLHTTPRequestを()を使用しています(メイン内asynchroousコール)があり、正しく推測しました。関数mainこのその他以内

function main() 
{ 
    var requestor = new net.Requestor("admin/getparam.cgi?mainvideostream&codectype", CurrentHandler); 
} 

とnet.Requestor =関数(URL、オンロード、ONERROR、方法、paramsは、contentTypeの) 以下のようにして、XMLHTTPRequestを(...)

されCurrenthandlerは、requsetからの応答を処理する別の関数です。

function CurrentHandler() 
{ 
    settings = this.req.responseText.split("\n");  
    for(var j=0; j<settings.length-1; j++) 
    { 
     var currentST= settings[j].split("=");  
     name = currentST[0]; 
     value = currentST[1]; 
     switch(name)  
     { 
     case "mainvideostream": cur_camid = value; break; 
      case "codectype": stream = value; break; 
     }  
    } 
    mainSection(); 
    } 

したがって、ページをロードする前にストリーム変数を調べる必要があります。

+1

私は 'main'機能は、いくつかの非同期コードを持っていると仮定しています。あなたは機能するコードを表示できますか? –

+0

JavaScriptのこのビットが完了するまで、ページ全体の読み込みを遅らせると思っていますか? – Jimmery

+3

JavaScriptが非同期で実行され、ページが非同期に読み込まれます。 JSでブロックする方法はいくつかありますが(非常に悪い考えですが)、ブラウザが同時に他のものをロードするのを防ぐことはできません(ユーザーがサイトを試して制御しようとすることもありません)。問題は、なぜこの機能を望んでいる/必要としているのかです。 – Rudu

答えて

2

短い答えは、ノーですあなたスクリプトが実行されます。

通常、これは働いていた、周りの2つの方法のいずれかで:

  1. あなたがにしたくないページの要素がに自分のCSS displayプロパティを設定することでをロードするように見える隠しますnone。スクリプトの最後にコマンドを追加して、これらの要素の表示プロパティをリセットします。

  2. 最初にロードしたくない要素を別のHTMLファイルに移動します。スクリプトの実行が終了したら、AJAXコールをサーバーに戻して、2番目のファイルを取得し、メインファイル内の適切な場所にロードします。

0

メインのコードが非同期で実行されない場合は、DOMロードイベントの後にコードをバインドする必要があります。使用してjQueryの:

$(document).load(function(){ 
main(); 

}); 

やjqueryのなしで、あなたの体のタグで:ながら、ページの読み込みを停止するには何も(安全な、標準規格準拠)方法はありません

<body onload="main()"> 
0

大丈夫ですが、他のここでは物事の一般的な順序は、ページをロードしてからjavascriptを実行することに注意しています。しかし、あなたはこれを回避するためにajaxを使うことができます。

空白のページが読み込まれたときに実行されるjavascriptで空白のページを作成し、このjavascriptコードブロックの最後にajaxでページの内容を呼び出します。

HERESに似た何かをするだろういくつかのjQueryコード:

<script> 
$(document).load(function(){ 

//YOUR CODE HERE// 

$.ajax({ 
    type:"GET", 
    url:"", // <-- url of the contents of your page here 
    dataType:"text", 
    success:function(data){ 
    $(".container").html(data); 
    }, 
    error:function(jqXHR,textStatus,errorThrown){ 
    $(".container").html("<pre>"+textStatus+"</pre><pre>"+errorThrown+"</pre>"); 
    } 
}); 
</script> 
<body> 
<div class="container"></div> 
</body> 
+0

とにかく私はAjaxなしでこれを行うことができます – Karthika

+0

確かに、AJAXを介してページのコンテンツを持って来る、あなたはいつもようにページを書くようにJavaScriptを得ることができます: ' $( "。container")。html( "_ YOUR PAGE CONTENT HERE _"); ' しかし、idはAJAXがもっと使いやすく長期的には維持しやすいと考えています。 なぜあなたはajaxを避けたいのですか?あなたのコードブロックがロードするページの内容に影響を与えたいですか?なぜならこれはまだ成功関数で実行できるからです。 – Jimmery

関連する問題