1

私は問題があります :)

古いjquery 1.3.2を最新バージョンの1.8.3にアップグレードしました。

もちろん、そのような古いバージョンからアップグレードすると、カスタム jquery コードで問題が発生します:)

バインドの代わりにプロキシを使用する必要があることがわかりましたが、まだ ajax コードに問題があります。

私は経験豊富な JavaScript デバッガーではありませんが、setProgress で ajax の成功が Google Chrome ブレークポイントをトリガーしないようです。

私のコード:

getProgress: function() {
    $.ajax({type: "GET", url: "/progress", dataType: "json",
      beforeSend: $.proxy(function(xhr) {
        xhr.setRequestHeader("X-Progress-ID", this.uuid);
      }, this),
      success: $.proxy(this.setProgress, this)
    });
  },
  setProgress: function(data) {
    if (data.state == "done") {
      this.finished();
    } else if (data.state == "error") {
      alert("ERROR"+data.status);
      this.finished();
    } else if (data.state == "starting") {
      this.statusText.text("Startar");
      this.setTime();
    } else {
      bps = bytesPerSecond((new Date()).getTime()-this.lastTime, this.received, data.received);
      this.lastTime = (new Date()).getTime()
      try { remaining = (this.size-this.received)/bps; } catch(err) { remaining = 0; }
      this.received = data.received;
      this.size = data.size;
      this.statusText.html(
        (this.received/this.size).toPercentage()+
        " Uppladdat ( "+
        data.received.toHumanSize()+
        " av "+
        data.size.toHumanSize()+
        " )   "+
        bps.toHumanSize()+
        "/s   "+
        timeLeft(remaining)+
        " kvar"
      );
      this.statusText.width((this.progressBar.width()-40)*(this.received/this.size)+20);
      this.setTime();
    }
  },

私のコードを壊すjquery 1.4+のajaxにいくつかの変更があったと思います。何が間違っている可能性がありますか?

4

1 に答える 1

0

わかりました、私はこれの解決策を見つけました:)

問題を引き起こしたのは実際にはコードではありませんでした。jqueryがバージョン1.4以降で検証する純粋なjsonを出力しなかったのは私のNginxconfでした(そのため、新しいバージョンではなくjquery 1.3.2で機能しました)。

だから私はこれを私のNginxconfに追加しました:

location ^~ /progress {
  upload_progress_json_output;
  report_uploads proxied;
}
于 2013-01-06T19:38:58.113 に答える