2013-08-04 27 views
1

我基本上希望有这GET'ing一个页面,然后函数返回基于这样的结果,这将导致以下问题:收益函数结果

所有GET方法是使用一个回调函数,这意味着该功能将在结果出现之前结束。如何暂停线程,直到回调被触发,然后在主函数中返回回调的结果?

function someFunction(){ 

$.get(
    "blabla.php", 
    function(data) { 
     // This data is supposed to be returned by "someFunction" 
    } 
) 

return //the data we retrieved from 'blabla.php' 

}

你会如何做到这一点?

编辑:我知道这个概念从卢阿,但我不完全确定是否有人会称它为“产生函数结果”。如果我错了,请纠正我。

+0

可能重复的[如何从AJAX调用返回响应?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) –

+2

重构您的代码,使其与回调一起工作。 –

回答

1

正确答案:不要。异步是执行HTTP请求的正确方法。但是,在某些情况下,如果想要在等待结果时阻止,则在这些情况下:

使用async参数。

function somefunction() { 
    var retVal; 
    $.ajax({ 
     url: "blabla.php", 
     success: function(data) { 
         // modify data here 
         retVal = data; 
        }, 
     async: false 
    }); 
    return retVal; 
} 
1

,而不是从你的函数返回的东西为什么不采取一个回调作为参数的?

function someFunction(callback) { 
    $.get("blabla.php", function (data) { 
    callback(data); 
    }); 
    // Or simply $.get("blabla.php", callback) if the data need not be modified before calling the callback. 
} 

然后可以像这样使用:

someFunction(function (data) { 
    alert("Data received!"); 
}); 

JavaScript是单线程的,所以这是真正做到这样的事情,而不会阻塞整个脚本的唯一合理的方法。