我正在为使用以下内容进行多次Ajax调用的应用程序提供维护:
dojo.xhrPost() and dojo.xhrGet()
我希望为系统上的所有调用添加一个通用的加载“icon + message”..我发现系统很困难且维护成本低,无法将loadFunction调用添加到所有的load:{all of { }}
所以如果有办法为系统上的所有ajax调用添加一个监听器,那么我就会徘徊,所以每次调用都会显示加载...
我读到我可以使用1.7中的方面做到这一点,但我正在处理的应用程序是使用1.6的Dojo版本
所以如果你知道一种方法来显示所有ajax调用的通用消息..。
感谢您的建议..
答案 0 :(得分:6)
您可以通过dojo/topic
实现此目的,即IO Pipeline Topics,自Dojo 1.4以来一直有效。
请参阅jsFiddle上的工作示例:http://jsfiddle.net/phusick/cMHdt/
首先,您必须全局启用IO管道主题,在ioPublish: true
,dojoConfig
或data-dojo-config
中设置djConfig
(取决于您使用的是哪个)。< / p>
然后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文档提供的topics
是:
/dojo/io/start
,并启动新的IO请求。此主题没有传递任何参数。/dojo/io/send
。它传递了dojo.Deferred请求主题。/dojo/io/load
。它通过主题传递响应和dojo.Deferred请求。/dojo/io/error
。它通过主题传递错误和dojo.Deferred请求。/dojo/io/done
。它通过主题传递错误和dojo.Deferred请求。/dojo/io/stop
。此主题没有传递任何参数。答案 1 :(得分:0)
让我们想起你是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();
}
}