2013-02-19 54 views
2

返回值我需要運行多個$ .get函數到幾個不同的PHP腳本,我想知道如果我可以在一個泛型函數中完成所有操作並只返回數據。我的計劃是這樣做:

var companyName = 'Google'; 

var customers = get('Customers', companyName); 
var vendors = get('Vendors', companyName); 

function get(table, variable){ 
    $.get('http://www.mysite.com/phps/get'+table+'.php', {company: variable}, function(data){return data}); 
} 

但是,這並不工作,因爲它是在一個嵌套函數。這是可能的(容易)還是我將不得不一次做$ .get?

+1

異步代碼要求您將代碼帶到結果中,而不是將結果返回給代碼。 – 2013-02-19 22:14:28

+1

你的意思是什麼不起作用? – 2013-02-19 22:15:35

+0

在你的控制檯顯示一些JavaScript錯誤? '.get()'是否定義?引用@邁克布蘭特:「你的意思是什麼不起作用?」 – Maykonn 2013-02-19 22:37:26

回答

1

請記住,在Javascript函數是一等公民,因此而不是返回一個值,你可能會做最好的發送功能:

var companyName = 'Google'; 

var customers, vendors; 

get('Customers', companyName, function(data) { customers = data; }); 
get('Vendors', companyName, function(data) { vendors = data; }); 

function get(table, variable, success){ 
    $.get('http://www.mysite.com/phps/get'+table+'.php', {company: variable}, success); 
} 

這是一個壞榜樣,因爲它不處理異常等c。但它應該給你提供給你的靈活性的想法。關鍵是要記住,功能是語言的基石,是什麼賦予它的力量。

如果你真的想堅持你使用方法(我不推薦),你可以添加一個附加功能...... (我真的真的不推薦)

var companyName = 'Google'; 

var customers, vendors; 

get('Customers', companyName, customers); 
get('Vendors', companyName, vendors); 

function get(table, variable, results){ 
    $.get('http://www.mysite.com/phps/get'+table+'.php', {company: variable}, function(data){ results = data}); 
} 

這樣做會導致您喪失根據調用結果更改體驗處理方式的能力。也許你想要一個選擇框被禁用,直到調用完成,並且它被填充,或者你可能想在調用失敗時執行一些特殊的事情。使用函數是一種更好的方法。

希望這會有所幫助。

+0

這工作完美!正是我在找什麼。謝謝。 – 2013-02-20 17:37:37

+0

你的第二個例子並不合理。 JavaScript沒有可以取消引用的指針,所以當你傳遞'customers'和'vendors'時,你只是傳遞當前值undefined。回調中的賦值發生在本地'results'變量*(參數)*。第一個示例稍微好一些,但仍然不是一個人會做什麼,因爲在本地代碼嘗試使用這些變量之後,很可能會對這些變量進行賦值。如果您的回調只是直接使用'data'來代替分配,那將更加清晰。 – 2013-02-20 18:37:24

1

如果您使用jQuery 1.5,$.get會返回一個jqXhr對象,它實現了諾言接口:

在jQuery 1.5中,所有的jQuery的Ajax方法返回XMLHttpRequest對象的一個​​超集。這個jQuery XHR對象,或「jqXHR」,由$獲得()返回實現了無極接口,給它的所有屬性,方法和行爲的保證

這可以這樣使用的:

function yourMultipleGetFunction(success, error) { 

    var jqXhr1 = $.get('url', data); 
    var jqXhr2 = $.get('url2', data2); 

    $.when(jqXhr1, jqXhr2).then(success, error); 
} 

yourMultipleGetFunction(function(data1, data2){ 
    //handle the objects returned from the get requests 
}, function(jqXHR, textStatus, errorThrown){ 
    //something went wrong, handle the error here 
}); 
+0

我不確定這是否適用於我。我展示的代碼非常簡化。實際上,我有大約40個不同的函數需要使用相同的get函數,並將一些變量傳遞給該函數。目前,每個函數都擁有它自己的.get,我只是想知道是否可以更容易地獲得一個可以使用的函數。看起來這樣做會有更多的工作要做。 – 2013-02-19 22:34:46

+0

@TylerMortensen如果你還沒有測試過它是否會起作用,你怎麼能這麼說?正如它在函數get(table,variable){...})中顯示的那樣;''可能會起作用,但這取決於你開始意識到什麼。 – Maykonn 2013-02-19 22:46:32

+0

如果您不必對AJAX數據進行任何特定的解析,那麼您很樂意遵守承諾;當他們都完成了(你會知道用@ .when',由@Johan指出),你可以繼續你的應用程序邏輯。 – gustavohenke 2013-02-19 22:53:47