2013-07-26 80 views
3
$(document).ready(function(){ 

    // Global function (will be include in any HTML file) 
    function m3_result(size_1, size_2, size_3){ 
     $.get('http://www.google.com', function(data){ 
      return data; 
     }); 
    } 

    // Another function 
    function calculate(){ 
     var size_1 = parseFloat($('#add_document_form #size_1').val()); 
     var size_2 = parseFloat($('#add_document_form #size_2').val()); 
     var size_3 = parseFloat($('#add_document_form #size_3').val());   
     var ax = m3_result(size_1, size_2, size_3); 

     alert(ax); // Here ax return: UNDEFINED 
    } 

    // Run 
    calculate(); 
}); 

結果是「未定義」,但我希望計算()將等待m3_result()執行。我看到,當我添加$ .get()時出現問題,但它需要...js功能裏面的功能和等待返回值

我有搜索回調()函數,但沒有符合我的需要,或者我沒有把這個權利。 任何幫助將不勝感激,謝謝。


GET url將是localy,並且元素ID也可以。

+0

你也可能會經歷一個SOP違反如果你真的是''GET'ting www.google.com' – Bergi

+0

請告訴我們你是如何試圖用一個回調函數 - 這的確是解決 – Bergi

+0

NB:沒有必要在你的選擇器中引用'#add_document_form'。 ID必須是唯一的,所以'#size_1'只能指向一個元素,所以它的父項是不相關的。 – Alnitak

回答

4

不能從異步函數返回一個結果,而不是你可以返回一個承諾後提供該值,這正好是$.get返回jqXHR對象:

function m3_result() { 
    return $.get(...) 
} 

和做相同的計算:

function calculate() { 
    ... 
    return m3_result(...); 
} 

,然後等待結果,這將作爲一個參數與.done函數註冊的回調傳遞:

calculate().done(function(result) { 
    alert(result); 
}); 
+1

返回諾言是非常好的,即使q是重複的,我喜歡這種技術,並在之前使用過它(也是,它沒有在重複中提到過)。 –

+2

@BenjaminGruenbaum它在提及欺騙,但它隱藏在許多其他可能的解決方案。不過,我總是使用這種方法。無論如何,我認爲給OP一個如何使用這個技術的具體例子是非常有用的。 – Alnitak

+0

酷,從未見過這之前,但看起來很有希望,景氣景氣 – Stokedout