1

从另一种方法我调用下面的方法,问题是它总是返回 0 而 data[4] 不是 0。如果 javascript 是单线程的,这里怎么会有同步问题?如果不能,请您解释并提出修复建议。

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;
}
4

1 回答 1

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);
});

这个解决方案比使 ajax 请求同步要好得多

于 2012-08-23T00:27:22.153 回答