function InitializeCharts() {
for (var i = 0; i < arguments.length; i++) {
compName = arguments[i];
$.ajax({
async:true,
timeout: 60000,
dataType: "json",
url: "/SalesDashboard/GetChartData",
data: { company: compName, from: startDate, to: endDate },
success: (function() {
var cmp = compName;
return function (data) {
ChartData[cmp] = data;
PrepareChart(data, cmp);
};
})(),
error: function (xhr, ajaxOptions, thrownError) {
console.log(xhr.status+': '+xhr.statusText);
console.log(thrownError);
}
});
}
}
我在客戶端使用上述函數來發出AJAX請求並獲取一些數據。它的工作很好,當我打電話這樣的功能:在ASP.NET MVC4中同時發生AJAX請求時發生內部服務器錯誤 - 500
InitializeCharts("ABC"); // A Single parameter
它工作正常的一個請求,但是當我傳遞多個參數如下圖所示,它會創建多個同時請求,並給了我「內部服務器錯誤-500「錯誤。
InitializeCharts("ABC", "BBC", "CCC", "DDD", "EEE", "ACD", "CBD", "CDS", "ADB"); // Multiple parameters
它給了我幾個隨機公司的錯誤,有時爲兩個,有時爲三個或四個。 我試着將AJAX請求中的超時時間增加到60000,但沒有奏效。我也通過IIS服務器,並將連接超時增加到3分鐘,但仍得到相同的響應。我知道它甚至不需要一分鐘就可以將數據返回給客戶端。如果我將ajax請求中的「async」值設置爲false,它將起作用,但會阻止用戶界面,直到所有公司都返回數據。
下面是我的服務器端代碼:
static int hitCount = 0;
private string ConnectionString = "server=localhost;database={0};uid=test;password=test;pooling=false;";
private string QueryString_Daily = "SELECT Day(mergefiledate) AS `Date`, COUNT(order_no) AS `Count` FROM orders_new WHERE DATE(mergefiledate)>='{0}' and Date(mergefiledate)<='{1}' GROUP BY DATE(mergefiledate);";
public Task<string> GetChartData(string company, string from, string to)
{
hitCount++;
return Task.Factory.StartNew(() => GetData(company, from, to));
}
private string GetData(string company, string from, string to)
{
string QuerySTR = string.Empty;
QuerySTR = string.Format(QueryString_Daily, startDt.ToString("yyyy-MM-dd"), endDt.ToString("yyyy-MM-dd"));
MySqlConnection mycon = new MySqlConnection(string.Format(ConnectionString, company));
MySqlCommand cmd = new MySqlCommand(QuerySTR, mycon);
cmd.CommandTimeout = 0;
DataTable dt = new DataTable();
try
{
mycon.Open();
}
catch (Exception ex)
{
Response.Write("<script>alert('Database connection error, please try again. ERROR_DETAILS: '" + ex.Message + "');</script>");
return null;
}
if (mycon.State == ConnectionState.Open)
{
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
da.Fill(dt);
}
if (mycon.State == ConnectionState.Open)
{
try
{
mycon.Close();
}
catch { }
}
if (dt.Rows.Count > 0)
{
var result = Newtonsoft.Json.JsonConvert.SerializeObject(dt);
return result;
}
else
{
return null;
}
}
我一直在試圖通過谷歌搜索,挖stackoverflow.com ...等,但還沒有運氣找出解決方案。 非常感謝幫助,非常感謝。
你可以讓這些ajax請求同步使用 - async:false – Nilesh
是的我可以和我已經這樣做了,但我在發出多個同時請求時出錯。 –
這真是一個服務器問題。你有後端代碼嗎?你可以調試嗎?它會記錄錯誤嗎? – Wutz