【发布时间】:2011-11-30 19:32:30
【问题描述】:
我有 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 的 $.ajax 设置为异步工作:true
然后使用 setTimeouts,我每隔几秒运行一次 GetServerUpdateProgress,它会返回 UpdateServerData 距离完成还有多远。
工作应用程序功能:
不工作:
因此,在非工作版本中似乎发生的是,即使 ajax 正在调用该函数,它也没有运行 GetServerUpdateProgress,它实际上并没有开始处理其中的任何内容,直到 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);
}
});
}
【问题讨论】:
标签: c# javascript asp.net-mvc-3 jquery