2011-08-05 2 views
1

の順序は、HTTPレスポンスのヘッダから値を読み込み、_ecpopという変数を設定し、後の操作のためにそれを使用するために、AJAXを呼び出すプログラムである混乱させるグローバルAjaxの遅延は、だから私は定義され</p> <p>...ここでの操作

var _ecpop=""; 

として_ecpopと呼ばれる変数、その後、ここでは、AJAX呼び出しコードです:

if (typeof XMLHttpRequest != "undefined") { 
    _ec_req = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
    _ec_req = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    // make the request 
    _ec_req.open("GET", requestString, true); 
    // function to deal with response 
    _ec_req.onreadystatechange = function() { 
    if (_ec_req.readyState==4) 
     { 
     if (_ec_req.status==200) 
      { 
      var respHeaders = _ec_req.getAllResponseHeaders(); 
      // strip out unnecessary headers 
      respHeaders = respHeaders.replace (/\n/g,"|X|"); 
      var beg = respHeaders.indexOf("ECAcc ("); 
      _ecpop = respHeaders.substring(beg+7,beg+10); 
      //make an if statement here... 
      console.log(_ecpop); 

      } 

     } 
    } 
    console.log(_ecpop); 

とコードの残りの部分は_ecpop使用しています。

問題はブラウザが_ecpop = ""でコードの残りの部分を実行することです。最初の2番目のconsole.log(_ecpop);空を返し、最初のconsole.log(_ecpop)を返します。正しい値を返します。

私はそれを回避する方法を知っている人はいますか?それはとても刺激的です...

ありがとう、

Amir。

答えて

1

AJAX(Asyncronous Javascript And XMLの略語)は本質的に非同期です。これは、Javascriptエンジンがスクリプトでそれに遭遇したときに実行を開始することを意味しますが、スクリプトの残りの部分は、AJAX呼び出しが完了するのを待たずに処理を継続します。

あなたは同期して動作するためにあなたのAJAX呼び出しを指示することによって、この動作を回避することができます

_ec_req.open("GET", requestString, false); 

をご希望の動作を提供しますopen()の三番目のパラメータとしてfalseを設定します。

+0

Firefoxで少なくとも動作しません – Amir

+0

最新のバージョンのスクリプトを使用していることを確認するには、ブラウザのキャッシュをクリアしてください。問題が解消されない場合は、Firebugコンソールでネットワーク要求を調べた後、問題に関する詳細情報を投稿してください。 –

+0

ここに問題がありました...私は_ec_req.send(null)をconsole.log(_ecpop)の前に呼び出す必要があります(後ではありません) – Amir

関連する問題