2012-08-23 89 views
1

從另一種方法我調用下面的方法,問題是它總是返回0,而數據[4]不是0.如果javascript是單線程如何在這裏出現同步問題?如果不是,你可以請解釋並提出修正建議。謝謝!AJAX + JQuery同步問題

  function GetVMData(url_s){ 
       var cpu_USG = 0; 
       $.ajax({ 
         url: url_s, 
         crossDomain: true, 
         dataType: 'jsonp', 
         success: function(data) { 
           cpu_USG = data[4]; 
         }, 
         error: function(xhr, status, error) { 
          alert('failed') 
         } 
        }); 
       return cpu_USG; 
      } 

回答

2

您可以使用jquery deferreds

// the function definition 
function GetVMData(url_s){ 
    return $.ajax({ 
      url: url_s, 
      crossDomain: true, 
      dataType: 'jsonp', 
      error: function(xhr, status, error) { 
       alert('failed') 
      } 
     }).pipe(function(data) { return data[4]; }); 
} 

// function call example 
GetVMData('some url').done(function(cpu_USG) { 
    alert(cpu_USG); 
}); 

該解決方案是MUCH不是使Ajax請求同步更好。