dajax / dajaxice中的进度指示器?

时间:2013-09-10 13:03:40

标签: django dajax

我成功地将dajax集成到了我的项目中。它很好,但缺乏一些可以使它更好的功能 - 例如。正在处理请求的可见指示符(变暗屏幕,沙漏,等等)。我在dajaxice.js中找到了一些地方,我应该在哪里拦截请求但这不是简单的方法..你是否知道一些简单的方法或者我应该选择难的方法 - 不使用任何ajax框架并手动完成所有工作?

1 个答案:

答案 0 :(得分:0)

这样的东西会起作用(在右上角给gmail样式加载...消息):

function useLoadingMessage(message) {
  var loadingMessage;
  if (message) loadingMessage = message;
  else loadingMessage = "Loading";

  Dajaxice.preHook = function() {
    var disabledZone = document.getElementById('disabledZone');
    if (!disabledZone) {
      disabledZone = document.createElement('div');
      disabledZone.setAttribute('id', 'disabledZone');
      disabledZone.style.position = "absolute";
      disabledZone.style.zIndex = "1000";
      disabledZone.style.left = "0px";
      disabledZone.style.top = "0px";
      disabledZone.style.width = "100%";
      disabledZone.style.height = "100%";
      document.body.appendChild(disabledZone);
      var messageZone = document.createElement('div');
      messageZone.setAttribute('id', 'messageZone');
      messageZone.style.position = "absolute";
      messageZone.style.top = "0px";
      messageZone.style.right = "0px";
      messageZone.style.background = "red";
      messageZone.style.color = "white";
      messageZone.style.fontFamily = "Arial,Helvetica,sans-serif";
      messageZone.style.padding = "4px";
      disabledZone.appendChild(messageZone);
      var text = document.createTextNode(loadingMessage);
      messageZone.appendChild(text);
    }
    else {
      document.getElementById('messageZone').innerHTML = loadingMessage;
      disabledZone.style.visibility = 'visible';
    }
  };

  Dajaxice.postHook = function() {
    document.getElementById('disabledZone').style.visibility = 'hidden';
  };
}

从您的javascript document.ready脚本调用useLoadingMessage(),或者从身体标记中的onload调用非常不可知的内容。

dajaxice.core.js中的几个黑客:

第49行:

    oXMLHttpRequest.onreadystatechange = function() {
        if (this.readyState == XMLHttpRequest.DONE) {
            if(Dajaxice.postHook) Dajaxice.postHook();
            if(this.responseText == Dajaxice.EXCEPTION || !(this.status in Dajaxice.valid_http_responses())){
                error_callback();

第65行:

    }
    if(Dajaxice.preHook) Dajaxice.preHook();
    if(method == 'POST'){
        oXMLHttpRequest.send(send_data);
    }
    else{

javascript与库无关,它应该只涉及向Dajaxice源添加2行。如果您希望使用其他加载元素,只需在html中为id disableZone设置visible = hidden,并为其css设置{{1}}。

我从dwr获取了这个解决方案,这是Java的dajaxice。它确实有一些其他很酷的功能,比如一些不错的调试页面和直接图像上传,这在dajaxice中会很方便....;)。