Dojo中的通用加载图标

时间:2012-06-04 17:08:33

标签: ajax dojo web

我正在为使用以下内容进行多次Ajax调用的应用程序提供维护:

dojo.xhrPost() and  dojo.xhrGet()

我希望为系统上的所有调用添加一个通用的加载“icon + message”..我发现系统很困难且维护成本低,无法将loadFunction调用添加到所有的load:{all of { }}

所以如果有办法为系统上的所有ajax调用添加一个监听器,那么我就会徘徊,所以每次调用都会显示加载...

我读到我可以使用1.7中的方面做到这一点,但我正在处理的应用程序是使用1.6的Dojo版本

所以如果你知道一种方法来显示所有ajax调用的通用消息..。

感谢您的建议..

2 个答案:

答案 0 :(得分:6)

您可以通过dojo/topic实现此目的,即IO Pipeline Topics,自Dojo 1.4以来一直有效。

请参阅jsFiddle上的工作示例:http://jsfiddle.net/phusick/cMHdt/

首先,您必须全局启用IO管道主题,在ioPublish: truedojoConfigdata-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是:

    当没有未完成的IO请求时,会发送
  • /dojo/io/start,并启动新的IO请求。此主题没有传递任何参数。
  • 每当启动新的IO请求时,都会发送
  • /dojo/io/send。它传递了dojo.Deferred请求主题。
  • 只要IO请求成功加载,就会发送
  • /dojo/io/load。它通过主题传递响应和dojo.Deferred请求。
  • 只要IO请求出错,就会发送
  • /dojo/io/error。它通过主题传递错误和dojo.Deferred请求。
  • 每当IO请求完成时,通过加载或错误发送
  • /dojo/io/done。它通过主题传递错误和dojo.Deferred请求。
  • 所有未完成的IO请求完成后,将发送
  • /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();
    }
}