Ajax Dojo中的通用加载图标

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.

我正在对一个应用程序进行维护,该应用程序通过以下方式进行多个Ajax调用:

dojo.xhrPost() and  dojo.xhrGet()
我想在系统上的所有调用中添加一个通用加载“图标+消息”。。在系统中,我发现很难将loadingFunction调用添加到所有load:function of all
xhr

因此,我想知道是否有办法将侦听器添加到系统上的所有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调用,才能将调用添加到那些函数中,因为我没有编写代码,我对它不太熟悉。。所以我想避免必须测试所有的调用,我同意这是应该做的。谢谢。