0

プロジェクトにdajaxをうまく統合しました。それは問題ありませんが、それをさらに良くすることができるいくつかの機能が欠けています - 例えば。リクエストが処理されていることを示す可視インジケータ (暗い画面、砂時計など)。dajaxice.js でリクエストをインターセプトする必要がある場所をいくつか見つけましたが、これは簡単な方法ではありません。簡単な方法を知っていますか、それとも ajax フレームワークを使用せずにすべての作業を手動で行うという難しい方法を選択する必要がありますか? ?

4

1 に答える 1

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()か、body タグの 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 でidofを指定し、その css に設定するだけです。disableZonevisible = hidden

このソリューションは、Java の dajaxice である dwr から取得しました。ただし、まともなデバッグページや直接画像のアップロードなど、dajaxiceで便利な他のクールな機能がいくつかあります.... ;)。

于 2013-10-27T09:21:24.453 に答える