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」をアラートする必要があります。しかし、「err a」+「err c」が表示されます。oncomplete でアラート (エラー) を実行しようとすると、以前の値にテキストが追加されていることがわかります。この場合、「err a」+「err b」です。この警告ボックスを閉じると、最後の警告ボックスには a と c だけが表示されます。

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

どうすれば機能しますか、つまり「b」にも設定しますか??

ありがとう

4

2 に答える 2

5

Ajax リクエストは非同期で発生するため、応答が返されたかどうかに関係なく、ajax 呼び出しがディスパッチされた後もページでの Javascript の実行が続行されます。

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

于 2009-08-17T13:49:16.963 に答える
2

「erraerrcerrb」が正しい出力です。順序は次のとおりです。

  • 「erra」を追加します。
  • リクエストを開始する新しいAjaxRequestを作成します(非同期)
  • 「errc」を追加
  • AjaxRequestcompleteは「errb」を追加して発生します

リクエストを同期させるか(非推奨)、または「errc」の追加を完全なメソッド内に移動する必要があります(「errb」のように)。

于 2009-08-17T13:50:48.477 に答える