세 번째 응용 프로그램에 연결해야하는 MVC 응용 프로그램이 2 개 있습니다. 문제를 일으키는 코드는 두 MVC 앱에서 동일합니다.
public bool UpdateServerData()
{
//string BASE_URL = "http://";
string BASE_URL = "http://localhost:55094";
string url = BASE_URL + "/Home/PullLiveData";
WebRequest wr = WebRequest.Create(url);
wr.Credentials = CredentialCache.DefaultNetworkCredentials; // uses current windows user
var response = (HttpWebResponse)wr.GetResponse();
return true;
}
public ActionResult GetServerUpdateProgress()
{
//string BASE_URL = "http://";
string BASE_URL = "http://localhost:55094";
string url = BASE_URL + "/Home/UpdateProgress";
WebRequest wr = WebRequest.Create(url);
wr.Credentials = CredentialCache.DefaultNetworkCredentials; // uses current windows user
var myobj = new UpdateAJAXProgress();
var response = (HttpWebResponse)wr.GetResponse();
var reader = new StreamReader(response.GetResponseStream());
JavaScriptSerializer js = new JavaScriptSerializer();
var objText = reader.ReadToEnd();
myobj = (UpdateAJAXProgress)js.Deserialize(objText, typeof(UpdateAJAXProgress));
return Json(myobj);
}
UpdateServerData는 db의 데이터를 새로 고치려면 localhost : 55094에 지시합니다. GetServerUpdateProgress는 진행 빈도/총계를 반환하므로 DB 새로 고침을위한 진행률 표시 줄을 표시 할 수 있습니다. 나는 완료 얼마나 멀리 UpdateServerData 함께 반환 GetServerUpdateProgress 몇 초마다 실행, 그리고 사용 setTimeouts
사실 : UpdateServerData를 실행은 $ 아약스는 비동기 작동하도록 설정되어 있습니다.
작업 응용 프로그램의 기능 :
작동하지 않음 :
그래서 무슨 일이 비 작업 버전에서 발생하는 것으로 보인다는 아약스 호출하더라도이 GetServerUpdateProgress 실행되지 않는 것입니다 UpdateServerData가 완료 될 때까지 실제로 내부에서 아무 것도 처리하지 않습니다. 작동하지 않는 스크린 샷에서 로딩 애니메이션이 모두 표시되므로 Ajax 동기화가 올바르게 설정되었는지 확인할 수 있습니다. GetServerUpdateProgress의 시작 부분에 중단 점을 넣었고 UpdateServerData가 처리를 마칠 때까지 트리거하지 않습니다.
나의 주요 관심사는 아마도 webconfig 또는 global.asax의 일부 설정이 다르다는 것인데, 이는이 두 가지 앱이 조금 다르게 실행되는 원인입니다. 어떤 아이디어?
은 여기에 관련된 자바 스크립트의 일부입니다 :
function UpdateData()
{
$("#ChartUpdateProgressWhole").show();
$.ajax({
type: "POST",
async: true,
url: '@(Url.Action("UpdateServerData", "Charts"))',
contentType: "application/json; charset=utf-8",
success: function (data) {
Alert2({
iconfilename: "tick.png",
text: "Database Updated!",
autohide: true,
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
},
complete:function (jqXHR, textStatus) {
$("#ChartUpdateProgressWhole").hide();
timerStop = true;
LoadChart();
},
});
if (!timerStop) {
CheckProgress();
}
}
function CheckProgress()
{
if(timerStop) {
CheckProgressAjax();
return;
}
window.setTimeout(CheckProgress, 2000);
CheckProgressAjax();
}
function CheckProgressAjax()
{
$.ajax({
type: "POST",
async: false,
url: '@(Url.Action("GetServerUpdateProgress", "Charts"))',
contentType: "application/json; charset=utf-8",
success: function (data) {
var width = (data.Completed * 100)/data.Total;
$("#ChartUpdateProgressPercent").css("width", width);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.responseText);
}
});
}
, 댄 :
나의 제안은 가능하면이 다음과 같은 속성을 사용하여 컨트롤러 당을 해제 할 수 수없는 경우, 모두 함께 세션 상태를 사용하지 않도록하는 것입니다! 고맙습니다! 당신이 행동에 여분의 U를 가지고 알아낼 내게 가져 갔어 : P – Robodude
굉장 :) 도와 줘서 고맙게도 그 사람은 나도 한 동안 너무 곤란하게했다 ... 미안 해요, 오스트 레일 리아 맞춤법 : P는. 이제 해결되었습니다. –