2013-07-26 82 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