0

我有一个函数,我在其中执行 ajax 请求并等到我得到响应并返回一个值,但返回的值是未定义的。怎么了?

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

如果我在 ajax 回调中打印 data[4] 的值,它会打印正确的值,因此我知道请求正在通过,但是当我尝试这个时:

            var cord;
            cord = GetVMData(url).done(function(cpu_USG) { 
            return cpu_USG;
            }); 
            alert(cord)

绳子的价值是错误的。

4

2 回答 2

2
    var cord;
    cord = GetVMData(url).done(function(cpu_USG) { 
    return cpu_USG;
    }); 
    alert(cord)

此代码异步运行。因此,您需要在回调中执行所有操作,例如:

    GetVMData(url).done(function(cpu_USG) { 
        alert(cpu_USG);
    }); 
于 2012-08-23T04:42:15.493 回答
0

这里:

var cord;

cord = GetVMData(url).done(function(cpu_USG) { 
  return cpu_USG;
});

alert(cord);

cord包含对象,而不是值。顺便说一句,你不知道 ajax 调用会在哪里结束,所以你应该熟悉回调的概念。

举个例子:

function makeRequest(url, callback) { 
  $.ajax({
    url: url, 
    crossDomain: true,  
    dataType: 'jsonp',

    error: function(xhr, status, error) {  
      alert('failed') 
    },

    success: callback
  }); 
}

var do_something = function (data) {
  alert(data[4]);
};

cord = makeRequest(url, do_something);
于 2012-08-23T04:43:21.090 回答