2013-07-29 69 views
0
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 ...等,但還沒有運氣找出解決方案。 非常感謝幫助,非常感謝。

+0

你可以讓這些ajax請求同步使用 - async:false – Nilesh

+0

是的我可以和我已經這樣做了,但我在發出多個同時請求時出錯。 –

+0

這真是一個服務器問題。你有後端代碼嗎?你可以調試嗎?它會記錄錯誤嗎? – Wutz

回答

2

非常感謝每個人的努力。我得到了解決方案。我是在我使用下面的語句設置爲無窮命令超時的印象,但實際上我錯了:

cmd.CommandTimeout = 0; 

我修改了超時爲:

cmd.CommandTimeout = 600; 

它完美地工作。再次感謝每一個小小的幫助。

+1

我知道! MySQL超時糟透了! :) – Fals

相關問題