Jquery:在返回之前等待回调

Posted

技术标签:

【中文标题】Jquery:在返回之前等待回调【英文标题】:Jquery: wait for callback before returning 【发布时间】:2011-01-06 02:40:24 【问题描述】:

我有一个 javascript 函数,它要求一些 ajax 数据并返回一个 JSON 对象。然后它应该返回对象。

问题是我不知道如何让函数从 Ajax 回调中返回。当然

myFunction: function() 
    $.get(myUrl, function(data) 
        return data;
    );

不起作用,因为返回的是内部函数而不是外部函数。

另一方面,在回调中执行我需要的内容会破坏我的 MVC 细分:这段代码在模型中,我希望在控制器中使用结果对象。

临时解决方法是

myFunction: function() 
    var result = $.ajax(
        url: myUrl,
        async: true,
        dataType: 'text'
    ).responseText;
    return eval(result);

它的缺点是在等待回复时阻塞浏览器(并使用 eval,我宁愿避免)。

还有其他解决方案吗?

【问题讨论】:

这已经被问了很多很多次了...例如:***.com/questions/31129/… 【参考方案1】:

您可以将回调传递给您的函数,以便在数据准备好时对其进行处理:

myFunction: function(callback) 
    $.get(myUrl, function(data) 
        callback( data );
    );

【讨论】:

这是迄今为止最干净的解决方案。我将使用控制器方法作为回调。缺点是需要将一个控制器方法分成两个,但我想我会使用这个解决方案。【参考方案2】:

为什么要它返回对象?如果您打算在之后使用此对象,更好的方法是将使用数据的函数放入回调中。

【讨论】:

我在问题中说过。函数本身在模型中,我想在控制器中使用对象。在回调中使用对象是可行的,但会破坏 MVC 模式。如果我找不到更好的选择,也许我会这样做。

以上是关于Jquery:在返回之前等待回调的主要内容,如果未能解决你的问题,请参考以下文章

连续迭代 mongodb 游标(在移动到下一个文档之前等待回调)

如何在 koa 中发送 HTTP 响应之前等待 url 回调?

如何在单元测试之前等待组件的挂载回调中的异步调用完成?

如何在koa发送HTTP响应之前等待url回调?

异步等待 Jquery ajax 回调?

如何等待传递给 Flask-SocketIO 的 emit() 的回调?