1

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

dojo.xhrPost() and  dojo.xhrGet()

我想为系统上的所有调用添加一个通用加载“图标+消息”.. 使我发现难以维护且难以维护的系统将 loadingFunction 调用添加到所有负载:所有功能xhr

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

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

因此,如果您知道一种为所有 ajax 调用显示通用消息的方法......

多谢指教。。

4

2 回答 2

6

dojo/topic您可以通过IO Pipeline Topics来实现这一点,它从 Dojo 1.4 开始工作。

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

首先,您必须全局启用 IO 管道主题,设置为ioPublish: true或(取决于您使用的)之一。dojoConfigdata-dojo-configdjConfig

然后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");
});

topics根据 Dojo 文档,可用的有:

  • /dojo/io/start当没有未完成的 IO 请求时发送,并启动新的 IO 请求。此主题不传递任何参数。
  • /dojo/io/send每当启动新的 IO 请求时发送。它为带有主题的请求传递 dojo.Deferred。
  • /dojo/io/load每当 IO 请求成功加载时发送。它为带有主题的请求传递响应和 dojo.Deferred。
  • /dojo/io/error每当 IO 请求出错时发送。它为带有主题的请求传递错误和 dojo.Deferred。
  • /dojo/io/done每当 IO 请求完成时发送,无论是通过加载还是通过错误。它为带有主题的请求传递错误和 dojo.Deferred。
  • /dojo/io/stop当所有未完成的 IO 请求完成时发送。此主题不传递任何参数。
于 2012-06-05T09:57:20.800 回答
0

假设您是dojo.xhrGet().Make 通用方法,您可以在其中传递您的 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();
    }
}
于 2012-06-05T08:19:48.930 回答