单击按钮时,将进行ajax调用。该按钮提供了一个变量,该变量将与ajax一起传递。当它是.done()
并返回数据时,我希望能够“附加”或“钩子”任何数量的其他函数(可能在其他文件中,也可能在这个ajax函数之前或之后加载)来访问返回的数据并对其执行一些操作。根据我到目前为止收集到的信息,这将是一种延迟/承诺的情况,但我在任何地方都找不到灵丹妙药的解决方案(希望不用任何定时器)。
page.html
<button data-ajax_action="url/to/action">Button</button>
common.js
$(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调用之后“挂钩”/访问该数据。我将如何设置它(也让任意数量的其他脚本也这样做)?
发布于 2015-09-08 22:40:02
与Barmar的答案类似,但使用的是jQuery 回调对象,它在概念上类似于数组,但具有更好的控制可能性,使用“标志”指定。
将jQuery.Callbacks
实例分配给全局ajax_callbacks
变量:
var ajax_callbacks = new jQuery.Callbacks( "once memory" );
有关可能的标志的描述,请参阅jQuery文档。“一次记忆”是一个很好的起点。
然后,其他代码可以这样做:
ajax_callbacks.add(function(data) { /* do something with data */ });
在您的.done()
函数中,您可以这样做:
ajax_callbacks.fire(data);
发布于 2015-09-08 19:29:02
使用包含要调用的函数数组的全局ajax_hooks
变量。
var ajax_hooks = [];
然后,其他代码可以这样做:
ajax_hooks.push(function(data) { // do something with data }));
在您的.done()
函数中,您可以这样做:
ajax_hooks.forEach(function(callback) {
callback(data);
});
https://stackoverflow.com/questions/32465545
复制相似问题