我有2個需要連接到第三個應用程序的MVC應用程序。導致問題的代碼在兩個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通知localhost:55094刷新數據庫中的數據。 GetServerUpdateProgress返回進度計數/總數,以便我可以顯示數據庫刷新的進度條。
運行UpdateServerData的$就被設置爲異步工作:真正
然後用一個定時器,我跑每隔幾秒鐘GetServerUpdateProgress返回多遠沿着UpdateServerData是無法完成。
工作應用功能:
不工作:
那麼出現在非工作版本中發生的是,它沒有運行GetServerUpdateProgress即使AJAX是調用在UpdateServerData完成之前,它實際上並沒有開始處理它裏面的任何東西。您可以看到ajax正在同步設置正確,因爲在非工作屏幕快照中都顯示加載動畫。我在GetServerUpdateProgress的開始處放置了一個斷點,它在UpdateServerData完成處理之後纔會觸發。
我主要關注的是一些環境下,或許在webconfig或Global.asax的,是不同的,這是什麼原因造成這兩個應用程序以不同的方式運行了一點。有任何想法嗎?
下面是一些相關的javascript:
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);
}
});
}
也做到了,丹!謝謝!花了我一段時間,找出你有一個額外的行爲雖然:P – Robodude
真棒:) :) 高興地幫助,那一個讓我難住了一段時間... 對不起,澳大利亞拼寫:P。現在修復。 –