0

問題:Chromeでの作業中に、スクリプトが同期xhr応答を待機していません。FireFox/IEで正常に動作しています。onreadyStateHandlersも使用しましたが、それでも、応答を受信する前に、他のコードが実行されます。

function callingScript()
{ var a=callServer();
   alert(a);//Here a is showing undefined while executing in chrome. 
            But in FF/IE its waiting for the response and then alerts a with response. 
}

function callServer()
{
 var response;
 var httpRequest = new XMLHttpRequest();
 httpRequest.open("POST","abc",false);
 httpRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
 httpRequest.onreadystatechange = function() 
   {       
        if (httpRequest.readyState != 4)  
           {return; }

        if (httpRequest.status != 200)    
               {response=httpRequest.status;}
        else   {response=httpRequest.responseText;}

   };
 httpRequest.send(data);
 return response;

 }

あなたの考えを共有してください!

4

1 に答える 1

1

関数callServer()は、要求が応答されるのを待ちません。この問題を解決するには、コールバックを使用します。

function callingScript()
{ callServer(function(response) {
      alert(response);
  });
}

function callServer(callback)
{
 var response;
 var httpRequest = new XMLHttpRequest();
 httpRequest.open("POST","abc",false);
 httpRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
 httpRequest.onreadystatechange = function() 
   {       
        if (httpRequest.readyState != 4)  
           {return; }

        if (httpRequest.status != 200)    
               {response=httpRequest.status;}
        else   {response=httpRequest.responseText;}

        callback(response);
   };
 httpRequest.send(data);
 return response;

 }
于 2012-10-31T07:13:45.317 に答える