2012-08-23 55 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请求同步更好。