有没有办法监听javascript函数退出?功能完成后可以设置的触发器吗?
我正在尝试使用用户界面混淆技术(BlockUI),而AJAX对象正在从数据库中检索数据,但该函数不一定最后执行,即使您将其放在函数调用的末尾。
示例:
function doStuff() {
blockUI();
ajaxCall();
unblockUI();
};
在解雇unBlockUI之前,是否有办法让doStuff监听ajaxCall完成?实际上,它线性地处理函数,按顺序调用每个对象,然后生成一个单独的线程来完成每个对象。因此,尽管我的AJAX调用可能需要10-15秒才能完成,但由于函数的线性执行,我只是在一瞬间阻止用户。
这种方法不太优雅......只有当AJAX函数设置的返回值设置为true或者具有某种性质时,才会结束循环。但这似乎不必要地复杂和低效。
答案 0 :(得分:4)
但是,您正在完成Ajax例程,您需要的是一个“回调”函数,它将在完成后运行:
function ajaxCall(callback){
//do ajax stuff...
callback();
}
然后:
function doStuff(){
blockUI();
ajaxCall(unblockUI);
}
答案 1 :(得分:1)
您的AJAX调用应指定回调函数。您可以在回调中调用unblockUI。
SAJAX是一个简单的AJAX库,它对如何进行AJAX调用提供了更多帮助。
还有another post描述了您正在寻找的内容。
答案 2 :(得分:0)
你可以做同步xhr。这将导致整个UI块在调用期间(无论可能需要多长时间)。
答案 3 :(得分:0)
您需要重新设计程序流以与asynchronus流兼容,例如指定在处理响应后要调用的回调函数。看看Prototype或JQuery或者......如何实现这一目标。
答案 4 :(得分:0)
答案很简单,当你的ajax请求返回结果时你必须调用unblockUI(),使用jQuery你可以这样做:
function doStuff(){
blockUI();
jQuery.ajax({
url: "example.com",
type: "POST", //you can use GET or POST
success: function(){
unblockUI();
}
});
}
答案 5 :(得分:0)
在我看来,您希望用户在从数据库中获取信息时等待。当我从数据库中调用Ajax调用某些信息时,我所做的就是显示一个动画gif,上面写着“得到它......” - 它会不断闪烁,直到检索到信息并显示在网页中。显示信息时,动画gif将关闭/隐藏,焦点将移至显示的新信息。动画gif让用户知道发生了什么事。