Ajax Dojo中的通用加载图标
我正在对一个应用程序进行维护,该应用程序通过以下方式进行多个Ajax调用:Ajax Dojo中的通用加载图标,ajax,dojo,web,Ajax,Dojo,Web,我正在对一个应用程序进行维护,该应用程序通过以下方式进行多个Ajax调用: dojo.xhrPost() and dojo.xhrGet() 我想在系统上的所有调用中添加一个通用加载“图标+消息”。。在系统中,我发现很难将loadingFunction调用添加到所有load:function of allxhr 因此,我想知道是否有办法将侦听器添加到系统上的所有ajax调用中,以便每次调用时都显示加载 我读到我可以用1.7中的aspect实现这一点,但我正在使用的应用程序是Dojo版本的1.
dojo.xhrPost() and dojo.xhrGet()
我想在系统上的所有调用中添加一个通用加载“图标+消息”。。在系统中,我发现很难将loadingFunction调用添加到所有load:function of allxhr
因此,我想知道是否有办法将侦听器添加到系统上的所有ajax调用中,以便每次调用时都显示加载
我读到我可以用1.7中的aspect实现这一点,但我正在使用的应用程序是Dojo版本的1.6
因此,如果您知道为所有ajax调用显示通用消息的方法
谢谢你的建议 让我们假设您是
dojo.xhrGet()
。使用通用方法传递URl和要调用的调用函数
var processDialog = new dijit.Dialog({
title : ""
}); //make it Global
function sendRequest(requestUrl, sucessFunction, errorFunction) {
dojo.xhrGet({
preventCache : "true",
url : requestUrl,
load : function (){
showProgressDlg(processDialog,true);
sucessFunction; //Call showProgressDlg(processDialog,false) once your job done inside this call back method.
},
error : function (){
showProgressDlg(processDialog,false);//If Any loading image present
errorFunction;
},
handleAs : "json"
});
}
function showProgressDlg(imgContent /*Pass Your Icon URL*/, isShow) {
if (isShow == true) {
processDialog .attr("content", imgContent);
dojo.body().appendChild(processDialog .domNode);
processDialog.titleBar.style.display = 'none';
processDialog.startup();
processDialog.show();
} else {
if (processDialog )
processDialog.hide();
}
}
让我们假设您是
dojo.xhrGet()
。创建一个公共方法,您可以在其中传递URl和要调用的调用函数
var processDialog = new dijit.Dialog({
title : ""
}); //make it Global
function sendRequest(requestUrl, sucessFunction, errorFunction) {
dojo.xhrGet({
preventCache : "true",
url : requestUrl,
load : function (){
showProgressDlg(processDialog,true);
sucessFunction; //Call showProgressDlg(processDialog,false) once your job done inside this call back method.
},
error : function (){
showProgressDlg(processDialog,false);//If Any loading image present
errorFunction;
},
handleAs : "json"
});
}
function showProgressDlg(imgContent /*Pass Your Icon URL*/, isShow) {
if (isShow == true) {
processDialog .attr("content", imgContent);
dojo.body().appendChild(processDialog .domNode);
processDialog.titleBar.style.display = 'none';
processDialog.startup();
processDialog.show();
} else {
if (processDialog )
processDialog.hide();
}
}
您可以通过实现这一点,也就是说,它从Dojo1.4开始工作
请参阅JSFIDLE上的工作示例:
首先,您必须全局启用IO管道主题,在dojoConfig
、data dojo config
或djConfig
中的一个中设置ioPublish:true
(取决于您使用的是哪个)
然后dojo.subscribe()
到特定主题,例如:
dojo.subscribe("/dojo/io/start", function(e) {
dojo.style(throbberNode, "display", "block");
});
dojo.subscribe("/dojo/io/stop", function(e) {
dojo.style(throbberNode, "display", "none");
});
根据Dojo文档,可用的主题有:
/dojo/io/start
在没有未完成的io请求时发送,并启动新的io请求。此主题不传递任何参数
/dojo/io/send
在启动新io请求时发送。它传递主题为的请求的dojo.Deferred
- 只要io请求成功加载,就会发送
/dojo/io/load
。它传递响应和dojo.Deferred,用于主题为的请求
- 每当io请求出错时,就会发送
/dojo/io/error
。它传递错误和dojo.Deferred,以便请求主题
/dojo/io/done
在io请求通过加载或出错完成时发送。它传递错误和dojo.Deferred,以便请求主题
/dojo/io/stop
在所有未完成的io请求完成时发送。此主题不传递任何参数
您可以通过实现这一点,也就是说,它自Dojo 1.4开始工作
请参阅JSFIDLE上的工作示例:
首先,您必须全局启用IO管道主题,在dojoConfig
、data dojo config
或djConfig
中的一个中设置ioPublish:true
(取决于您使用的是哪个)
然后dojo.subscribe()
到特定主题,例如:
dojo.subscribe("/dojo/io/start", function(e) {
dojo.style(throbberNode, "display", "block");
});
dojo.subscribe("/dojo/io/stop", function(e) {
dojo.style(throbberNode, "display", "none");
});
根据Dojo文档,可用的主题有:
/dojo/io/start
在没有未完成的io请求时发送,并启动新的io请求。此主题不传递任何参数
/dojo/io/send
在启动新io请求时发送。它传递主题为的请求的dojo.Deferred
- 只要io请求成功加载,就会发送
/dojo/io/load
。它传递响应和dojo.Deferred,用于主题为的请求
- 每当io请求出错时,就会发送
/dojo/io/error
。它传递错误和dojo.Deferred,以便请求主题
/dojo/io/done
在io请求通过加载或出错完成时发送。它传递错误和dojo.Deferred,以便请求主题
/dojo/io/stop
在所有未完成的io请求完成时发送。此主题不传递任何参数
谢谢,这是一个很好的解决方案,但我必须更新所有xhr调用以将调用添加到这些函数中,因为我没有编写代码,我对它不太熟悉。。所以我想避免必须测试所有的调用,我同意这是应该做的。非常感谢。这是一个很好的解决方案,但是我必须更新所有的xhr调用,才能将调用添加到那些函数中,因为我没有编写代码,我对它不太熟悉。。所以我想避免必须测试所有的调用,我同意这是应该做的。谢谢。