2009-08-17 5 views
1
var err = ''; 

err += 'err a'; 
myString = 'Blah'; 
new Ajax.Request('/check_me.php', 
    { 
     method:'get', 
     parameters: { 
       'string': myString 
      }, 
      evalScripts: true, 
      onComplete: function(t){ 
       var response = t.responseText; 
       if (response == false) { 
        //do nothing 
       } else { 
        err += 'err b.\n'; 
        //alert(err); 
       } 
      } 
     }); 

err+= 'err c'; 

alert(err); 

上記では、「err a」+「err b」+「err c」を警告する必要があります。しかし、私はちょうど "エラー" + "エラーC"を取得します。 oncompleteで警告(エラー)しようとすると、以前にあった値にテキストが追加されているのがわかります。この場合、「err a」+「err b」。このアラートボックスを閉じると、最後のアラートボックスには、 aとcが表示されます。関数内の変数にJavascriptでテキストを追加する方法はありますか?

グローバル変数から値を読み取っていますが、書き込みはしていません。

どのように動作させるか、つまり「b」に設定しますか?

おかげ

答えて

5

Ajaxリクエストは非同期的に起こるので、あなたのAJAX呼び出しは関係なく、レスポンスが返ってきたかどうかの、派遣された後に、ページ上のJavascriptの実行は継続されます。

スクリプトがerr変数を警告すると、onCompleteがまだ呼び出されていないため、期待どおりの出力が得られません。

+0

どのように私はそれを働かせますか? – TigerTiger

+0

@Wbdvlpr - Ajax.Requestの後ではなく、onCompleteメソッド内で呼び出しの完了時に何をしたいかを入れます。 – karim79

+0

アイデアは何ですか?ちょうどfyi ..もし私がoncomplete関数内で警告するならば、この警告ボックスは最後の警告ボックスの前にポップアップします。 – TigerTiger

2

"err a err c err b"が正しい出力です。順序は次のとおりです。

  • append "err a";
  • 追記 "ERR C"
  • AjaxRequestの完全なあなたは(要求の同期を行うためにいずれかの必要はありません "Bを誤る"

を追加起こる要求(非同期)を開始新しいAjaxRequestを作成します"err c"のアペンドを完全なメソッド(err bのように)に移動してください。

+0

これは、先に述べたように、最終アラート(エラー)シャウレ印刷を意味しますか?それはdoesntです。 – TigerTiger

+0

私は出力の順序は関係ありません – TigerTiger

関連する問題