2011-08-30 21 views
0

Javascriptで問題が発生しましたが、私には分かりません。何が起こっているJavascript実行の順序の問題

は、以下の

var bValid = false; 
alert(bValid + " 1"); 
if(validateForm() == TRUE) 
{ 
    $.get("submit_manageUsers.php", 
     {action: sendAct, userID: userID}, 
     function(responseText) 
     { 
      if(responseText == "GOOD") 
      { 
       alert("Update Successful"); 
       bValid = true; 
       alert(bValid + " 2"); 
      } 
      else 
      { 
       alert(responseText + "\n Update Unsuccessful"); 
       bValid = false; 
      } 
     }, 
     "html" 
    );  
    bvalid = true; 
    alert(bValid + " 3"); 
} 
alert(bValid + " 4"); 
if(bValid == true) 
{ 
    //do something 
} 
alert(bValid + " 5"); 

EDITです:実際に、それはおそらく私が物事を行う方法を知るだろう、助け場合に何が起こっているかのもう少しを追加しました!

上記のコードからの出力は次のようになります

偽1

偽2

偽4

偽5

真3

ここでの問題は、if(bValid == true) iこれは、if(validateForm() == TRUE)の前に実行されているので、bValidは常にfalseです。

なぜコードの一部が他の部分の前に実行されていますか?

これに関するお手伝いをしております。

+0

値が何でありますか「TRUE」の – Jimmy

+0

TRUEは、validateForm()関数がbValid変数をTRUEに設定するために返す関数です。 – Adam

+0

この出力を生成するhttp://jsfiddle.net/を作成してください。 'TRUE'が定義されていないと、コードは失敗し、それ以上の出力は生成されません。定義されている場合、出力は異なります。私の視点からは、出力の順序は不可能です。 –

答えて

1

Javascriptでは大文字と小文字が区別されます。 validateForm()はbool権限を返しますか?だから真実か偽か。 TRUEはではなく、と同じです。

if (validateForm() == true) { // do something. } 

私もさらに一歩進み、厳格な等号を使用します。

if (validateForm() === true) { // do something. } 

また、BVALIDはBVALIDと同じではありません。

今後は、jsfiddle、jslint、jsbinなどの構文エラーを見つけるのに役立つ数多くのjavascriptツールを利用することをお勧めします。私たちはすべて間違いを犯し、時にはこれらの少しシンプルな詳細が大きな頭痛を引き起こします。 YUIとGoogleには構文チェックツールがありますが、コンパイラの松葉杖はありません(私はC#で毎日使用しています)。

グーグル - http://code.google.com/closure/

ヤフー - あなたは1秒または30秒かかることがありますPHPのページへ非同期コールを作っている

- より多くの情報が元の質問に提供された後http://developer.yahoo.com/yui/

。 (に.get機能力)デフォルトで非同期ある

http://api.jquery.com/jQuery.ajax/

はJQueryのAJAX。ただし、これを無効にして同期させることもできます。

+0

これは文法エラーだったと思うけど、質問を入力すると急いで、すべての変数は実際のコードと同じように綴られています。これはjQuery .getと関係していると思います。どのように動作します! – Adam

+0

validateForm()関数を見たいと思います。 –

+0

PHPページへの非同期呼び出しが1秒または30秒かかる場合があります。 –

0

これらの条件にtrueまたはfalseを指定する必要はありません。このような何かを試してみて、それがあなたの問題を解決するかどうかを確認:それは第二の検証を開始する前に

var bValid = false; 
alert(bValid + " 1"); 

if (validateForm()) { 
    bvalid = true; 
    alert(bValid + " 2"); 
} 

alert(bValid + " 3"); 
if (bValid) { 
    //do something 
} 

alert(bValid + " 4"); 
+0

いいえ、助けてくれなかった – Adam

0
var bValid = false; 
alert(bValid + " 1"); 

if(validateForm() == TRUE){ 
    bvalid = true; 
    alert(bValid + " 2"); 
} 
alert(bValid + " 3"); 

setTimeout(function() { // Continue le script après l'insertion du html 
    if(bValid == true){ 
     //do something 
    } 
    alert(bValid + " 4"); 
}, 0); 

この方法では、スクリプトの最初の部分は行うべきです。 このヘルプが必要です。

0

$.getは非同期です。つまり、メッセージを送信し、電話を切って、submit_manageUsers.phpで終了したときにjQueryがあなたに電話するのを待つことを意味します。ステップ3とステップ4は電話を切った後に実行されますが、ステップ2はコールバックが呼び出された後にのみ発生しますが、それはしばらく時間がかかることがあります。あなたのメッセージが順調でないのはこのためです。あなたはそれが正しい時間に実行されるため、コールバックの内側

// DoSomethingMeaningfulHere 
alert(bValid + " 4"); 
if(bValid == true) 
{ 
    //do something 
} 
alert(bValid + " 5"); 

への呼び出しを配置する必要があり

$.get(url, data, function(response) { 
    if (response == 'GOOD') { 
     alert('success!'); 
     DoSomethingMeaninfulHere(); 
    } else { 
     alert(response + "\n Update Unsuccessful"); 
    } 
}); 

(AJAX要求が完了した後である)