1

我有个问题 :)

我将旧 jquery 1.3.2 升级到最新版本 1.8.3。

当然,从这样的旧版本升级会导致我的自定义 jquery 代码出现问题 :)

我发现我应该使用代理而不是绑定,但我的 ajax 代码仍然存在问题。

我不是一个经验丰富的 javascript 调试器,但对我来说,似乎 ajax 成功不会触发我在 setProgress 中的 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

好的,我找到了解决方案:)

真正导致问题的不是代码。是我的 Nginx conf 没有输出 jquery 现在在 1.4+ 版本中验证的纯 json (这就是为什么它在 jquery 1.3.2 中工作而不在较新版本中工作的原因)。

所以我将它添加到我的 Nginx conf 中:

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