0

サーバー上の現在のプロセスをクライアント側に表示しようとしています。

これを行うには、セッション レベルで文字列を定義し、プロセス サーバー プロセッサごとに次のように更新します。

sessionStatus = "Loading entities from DB";

また

sessionStatus = "Validates the user information";

私は次のようにajaxとJsonを使用しています:

サーバー側:

[OutputCache(NoStore = true, Location = OutPutCscheLocation.None, Duration = 0)]
public JsonResult GetStatus()
{
        return Json(new {status = sessionStatus}, JsonRequestBehavior.AllowGet)
}

クライアント側:

setInterval('displayStatus()', 50);

function displayStatus(){
var url = '@(Url.Action("GetStatus"))';
$.ajax({
url: url,
dataType: "json",
async: false,
success: function(result) {
docunent.getElementById('statusText').innerHTML = result.status;
}
});
}

それが、サーバープロセスが保持する毎秒を期待する方法です。

しかし問題は、最初のアクションしか表示されず、サーバーがすべてのアクションを実行することです。

そして最後に、最後のアクションはほんの一瞬しか見えません。

つまり、彼はサーバー上でのみすべてのプロセスをビジー状態にしてから、クライアントに直面します。

その過程でサーバー側がクライアント上でも操作を継続できる方法を誰か教えてください。サーバー上で何が起こっているかをリアルタイムで確認できますか?

ありがとうございました

リファエル

4

1 に答える 1

0

XmlHTTPRequestjquerys xhr コールバックを利用してこれを行うことができます。これにより、送信前に独自のものを作成できます。

$.ajax({
  xhr: function()
  {
    var xhr = new XMLHttpRequest();
    xhr.upload.addEventListener("progress", function(e){
      if (e.lengthComputable) {
        console.log("Upload Progress: " + e.loaded/e.total)
      }
    }, false);
    xhr.addEventListener("progress", function(e){
      if (e.lengthComputable) {
        console.log("Download Progress: " + e.loaded/e.total)
      }
    }, false);
    return xhr;
  },
  type: 'GET',
url: "http://upload.wikimedia.org/wikipedia/commons/7/7d/Head_Platon_Glyptothek_Munich_548.jpg",
});
//"Download Progress: 0.017997048457690075"
//"Download Progress: 1"

私は質問が正しいことを願っています。(そして、画像は実際にはまともな進捗状況の更新を取得するのに十分な大きさではないようですが、アイデアは明確なはずです

于 2013-01-22T10:08:39.643 に答える