2012-08-23 51 views
0

我有一個函數,我執行一個ajax請求,並等到我得到一個響應並返回一個值,但返回的值是未定義的。哪裏不對?管道值:Ajax + JQuery

  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) 

值繩索是錯誤的。

回答

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

你只是重複了我寫的代碼。我如何獲得價值呢? – user1454693

+0

現在我明白了爲什麼,謝謝!解決方法是什麼? – user1454693

+0

我有很多使用該值的其他部分,所以我應該只是在回調中封裝所有這些部分? – user1454693

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

此代碼異步運行。所以,你需要在回調執行一切,如:

GetVMData(url).done(function(cpu_USG) { 
     alert(cpu_USG); 
    }); 
+0

的GetVMData功能會從另一個叫做需要cpu_USG值的函數,我該如何實現這一點。所以從前面的例子來看,線將用於繪製圖表。 – user1454693

+0

@ user1454693:那又如何?你**必須**以我演示的方式使用它。這就是延遲和異步調用如何工作 – zerkms

+0

所以你是否說我應該封裝所有在回調中使用該值的代碼?是否有另一種方法來實現這一目標? – user1454693