Javascript 管道值:Ajax+;JQuery

Javascript 管道值:Ajax+;JQuery,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个函数,在这个函数中,我执行一个ajax请求,等待得到响应并返回一个值,但返回的值是未定义的。怎么了 function GetVMData(url_s){ return $.ajax({ url: url_s, crossDomain: true, dataType: 'jsonp',

我有一个函数,在这个函数中,我执行一个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回调中打印数据[4]的值,它会打印正确的值,因此我知道请求正在进行,但当我尝试此操作时:

            var cord;
            cord = GetVMData(url).done(function(cpu_USG) { 
            return cpu_USG;
            }); 
            alert(cord)
跳线的值是错误的

    var cord;
    cord = GetVMData(url).done(function(cpu_USG) { 
    return cpu_USG;
    }); 
    alert(cord)
此代码异步运行。因此,您需要执行回调中的所有操作,如:

    GetVMData(url).done(function(cpu_USG) { 
        alert(cpu_USG);
    }); 
在这里:

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

GetVMData函数将从另一个需要cpu_USG值的函数调用,我如何实现这一点。因此,从上一个示例中,跳线将用于绘制图表。@user1454693:那又怎样?你必须像我演示的那样使用它。这就是延迟和异步调用的工作方式,您是说我应该在回调中封装使用该值的所有代码吗?有没有其他方法来实现这一点?@user1454693:延迟解决后(当ajax请求成功完成时发生),回调就会被调用。您可以在回调中获取所有数据,并且只能在回调中获取。附言:延迟使处理ajax变得容易了数百万倍,因此我无法理解您的困惑。您只是重复了我编写的代码。那么我该如何获取该值呢?我还有很多其他部分使用该值,所以我应该将所有这些部分封装在回调中吗?@Speransky Danil:callbacks是他最初拥有的。延迟更容易处理,实际上回调解决方案不会改变anything@user1454693:你为什么要检查这个答案?!你有很好的回调代码,现在你有奇怪的回调代码。无法获取,因为在以后的jquery版本中将不推荐使用o_o回调,因此没有理由使用它it@Speransky丹尼尔:1。延迟是将很快更改回调的内容(回调在1.8中被弃用)2。延期要灵活得多。看看他之前的问题4。如果“straigh hands”=“使用旧的和过时的技术”-那么请随意这样做
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);