首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery Ajax回调钩系统

jQuery Ajax回调钩系统
EN

Stack Overflow用户
提问于 2015-09-08 19:16:37
回答 2查看 608关注 0票数 0

单击按钮时,将进行ajax调用。该按钮提供了一个变量,该变量将与ajax一起传递。当它是.done()并返回数据时,我希望能够“附加”或“钩子”任何数量的其他函数(可能在其他文件中,也可能在这个ajax函数之前或之后加载)来访问返回的数据并对其执行一些操作。根据我到目前为止收集到的信息,这将是一种延迟/承诺的情况,但我在任何地方都找不到灵丹妙药的解决方案(希望不用任何定时器)。

page.html

代码语言:javascript
运行
复制
<button data-ajax_action="url/to/action">Button</button>

common.js

代码语言:javascript
运行
复制
$(document).on('click','[data-ajax_action]',function(e){

    var action = $(this).data('ajax_action');

    $.ajax({

        url: action,
        dataType: 'json'

    }).done(function(data){

        // do default stuff with data
        // somehow provide access to data var to other functions
    });

    e.preventDefault();
});

现在,假设我在common.js之前加载了另一个js文件,它需要在进行ajax调用之后“挂钩”/访问该数据。我将如何设置它(也让任意数量的其他脚本也这样做)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-08 22:40:02

与Barmar的答案类似,但使用的是jQuery 回调对象,它在概念上类似于数组,但具有更好的控制可能性,使用“标志”指定。

jQuery.Callbacks实例分配给全局ajax_callbacks变量:

代码语言:javascript
运行
复制
var ajax_callbacks = new jQuery.Callbacks( "once memory" );

有关可能的标志的描述,请参阅jQuery文档。“一次记忆”是一个很好的起点。

然后,其他代码可以这样做:

代码语言:javascript
运行
复制
ajax_callbacks.add(function(data) { /* do something with data */  });

在您的.done()函数中,您可以这样做:

代码语言:javascript
运行
复制
ajax_callbacks.fire(data);
票数 2
EN

Stack Overflow用户

发布于 2015-09-08 19:29:02

使用包含要调用的函数数组的全局ajax_hooks变量。

代码语言:javascript
运行
复制
var ajax_hooks = [];

然后,其他代码可以这样做:

代码语言:javascript
运行
复制
ajax_hooks.push(function(data) { // do something with data }));

在您的.done()函数中,您可以这样做:

代码语言:javascript
运行
复制
ajax_hooks.forEach(function(callback) {
    callback(data);
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32465545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档