2010-05-30 60 views
1

我有了一個方法的JavaScript類:如何讓這個JavaScript類成員返回一個值?

function someClass() { 
    this.someMethod = someClass_someMethod; 
} 

function someClass_someMethod() { 
    // make an AJAX request 
} 

的問題是,someClass_someMethod()需要返回AJAX請求的值。

我正在使用jQuery的$.getJSON()方法來獲取數據。數據需要被返回,但似乎獲得數據的唯一方法是通過回調。

這怎麼辦?

+0

見http://stackoverflow.com/questions/133310/how-can-i-get-jquery-to-perform-a-synchronous-rather-than-asynchronous-ajax-req – 2010-05-30 03:17:47

回答

1

您可以使用非異步請求,但是在請求正在執行時綁定瀏覽器。

回調是真正的唯一方法,因爲您需要等待任意時間的請求才能成功或出錯。

+0

我怎麼能將值返回給調用'someMethod'的客戶端,然後?他們將不得不提供回調? – 2010-05-30 03:26:29

+0

我猜他們是:) – 2010-05-30 03:39:57

1

不用擔心從頭開始編寫AJAX時可能出現的所有跨瀏覽器問題,我建議使用像jQuery這樣的行業標準框架來處理您的請求。正如Delan Azabani指出的那樣,它是異步的,這是異步通信新手的共同要求。在這個答案

var someClass = new someClass(); 
someClass.someMethod(function(data) { 
    ... handle your preprocessed data here ... 
}); 

沒有新的概念,只是提供了代碼示例:

function someClass_someMethod(callback) { 
    $.getJSON(..., function(data) { 
     // process the data here... 
     callback(data); 
    ); 
} 

你現在可以做到這一點。

+0

但數據需要在返回給客戶端之前由'someClass'處理。 – 2010-05-30 03:29:43

+0

已更新,以便您可以預處理數據。 – tbranyen 2010-05-30 04:26:04

1

在此代碼中someClass_someMethod將發出非異步請求並返回值。因此,只有在請求結束時纔會執行任何操作,從而允許您返回值。

function someClass() { 
    this.someMethod = someClass_someMethod; 
} 

function someClass_someMethod() { 
    var ret = {}; 
    $.ajax({ 
     url: url, 
     dataType: 'json', 
     success: function(data) { 
      ret = data; 
     }, 
     async: false 
    }); 
    return ret; 
} 
相關問題