2017-04-21 9 views
1

AjaxリクエストのHTMLプログレスバー(または任意のコンポーネント)をサーバー側で更新する方法はありますか?例えばASP.NET MVC AjaxリクエストからのHTMLコンポーネントの更新

(シミュレート):

はJavaScript:

$.ajax({ 
url: '/Sales/SaveStoreByType', 
type: 'POST', 
data: { 
    locationId: id 
}, 
success: function (result) { 
     ... 
}, 
error: function (xhr, ajaxOptions, thrownError) { 
     ... 
}, 
update: function(percent){ 
    MyProgressBar('update',percent); 
} 
}); 

とサーバ側:

public IActionResult SaveStoreByType(short locationId) 
{ 
    foreach (var item in collection) 
    { 
    //here simule a heavy process and update progress bar 
    i++; 
    ajaxrequest.update(i); 
    } 
    return Json(new { error = 0 }); 
} 

おかげ

+2

いいえサーバー側のコードはWebブラウザを操作できません。応答のみを返すことができます。あなたがしようとしていることは、クライアントサイドとサーバーサイドのコードの間の "リアルタイム"エクスペリエンスを促進する、SignalRのようなものの合理的なユースケースのように思えます。 – David

答えて

1

あなたは、サーバーとのcomunicateするSignalRを使用することができ、かつタスクステータスを取得すると、ステータスバーを更新できます

しかし、あなたはまた、再帰関数とのsetTimeout()関数でループ内でこのような何か要求を行うことができます。あなたがアクションを持っている必要があります

function viewProgress() { 
    $.get('@Url.Action("GetTaskStatus", "YourController")', function (data) { 
     if(data.Success){ 
      //finished 
     } 
     else{ 
      //update your status bar from data.Percent 
      setTimeout(viewProgress(), 1000); 
     } 
    }); 
} 

を:YourControllerでGetTaskStatusそのオブジェクトにするJsonResultを返します成功とパーセントのプロパティが含まれています

関連する問題