我使用$ .ajax和asp.net中的json从数据库中获取记录。
一切正常但当记录数大于1000时,它会崩溃并显示“500(内部服务器错误)”错误消息。
jQuery代码
$.ajax({ type: "post",
url: "Default.aspx/SELECT_ALL",
data: _data,
contentType: "application/json;charset=utf-8", dataType: "json",
success: function (data) {
if (data.d != null || data.d != 'null') {
var Items = data.d;
if (Items.length > 0) {
// Create Table header and prepare the body
$.fn.create_table();
for (var r = 0; r < Items.length; r++) {
// Add new row and columns
var tRow = tBody.insertRow(-1);
for (var x = 0; x < Cols.length; x++) {
var td = tRow.insertCell(-1);
var input = document.createElement('input');
input.type = 'text';
input.id = columns[x] + '-' + row;
if (x == 1 || x == 2 || x == 3) {
input.setAttribute("class", "validate text");
} else if (x == 4) {
input.setAttribute("class", "validate number number-only");
}
if (x == 0) {
input.type = 'checkbox';
input.value = row;
} else {
switch (x) {
case 1:
//input.value = Items[r].BMLCode;
td.innerHTML = '<input type="text" id="' + columns[x] + '-' + row + '" value="' + Items[r].Code + '" /><input type="hidden" name="ID" id="ID" value="' + Items[r].ID + '" /><input type="hidden" name="updated" id="updated" />';
break;
case 2:
input.value = Items[r].Description;
break;
case 3:
input.value = Items[r].Unit;
break;
case 4:
input.value = Items[r].Price;
input.setAttribute("onblur", '$.fn.adRow(' + r + ');');
break;
default:
input.value = 'Error';
break;
}
}
if (x == 0) {
td.innerHTML = '<input type="checkbox" id="' + columns[x] + '-' + row + '" value="' + row + '" /><label>' + row + '</label>';
} else if ($.inArray(x, [1, 3, 4, 5])) {
td.appendChild(input);
}
if (x >= columns.length - 1) {
row++;
$(".number-only").each(function () {
$(this).numberBox();
});
}
}
}
} else {
$.fn.create_table();
}
}
}
});
ASP.NET代码
#region Items
public class clsCodes
{
public string ID { set; get; }
public string Code { set; get; }
public string Description { set; get; }
public string Unit { set; get; }
public string Rate { set; get; }
}
#endregion
#region Select All
[WebMethod]
public static clsCodes[] SELECT_ALL(string Activity_ID)
{
try
{
List<clsCodes> _Return = new List<clsCodes>();
Database db = new Database();
DataTable table = null;
Dictionary<string, object> Parameters = new Dictionary<string, object>();
Parameters.Add("Procedure", "usp_codes");
Parameters.Add("@Activity_ID", MajorActivity_ID);
db.Open();
table = db.ExecuteTable(Parameters);
db.Close();
if (table != null && table.Rows.Count > 0)
{
int iRow = 0;
foreach (DataRow dRow in table.Rows)
{
if (iRow >= 1000)
{
break;
}
clsCodes _Code = new clsCodes();
_Code.ID = dRow["ID"].ToString();
_Code.Code = dRow["Code"].ToString();
_Code.Description = dRow["Description"].ToString();
_Code.Unit = dRow["Unit"].ToString();
_Code.Rate = dRow["Rate"].ToString();
_Return.Add(_Code);
iRow++;
}
}
return _Return.ToArray();
}
catch (Exception ex)
{
return null;
}
}
#endregion
注意:我在javascript中使用HTML DOM Table Object来创建表。
答案 0 :(得分:1)
你在表中有多少行?
if (table != null && table.Rows.Count > 0) {
int iRow = 0;
foreach(DataRow dRow in table.Rows) {
if (iRow >= 1000) {
break;
}
clsCodes _Code = new clsCodes();
_Code.ID = dRow["ID"].ToString();
_Code.Code = dRow["Code"].ToString();
_Code.Description = dRow["Description"].ToString();
_Code.Unit = dRow["Unit"].ToString();
_Code.Rate = dRow["Rate"].ToString();
_Return.Add(_Code);
iRow++;
}
}
return _Return.ToArray();
由于“500服务器错误”,问题必须出在您的ASP.net代码中
中可能存在未知异常
catch (Exception ex) {
return null;
}
它适用于999行?!
答案 1 :(得分:0)
虽然这个问题很老但我在页面上遇到了类似的问题,需要显示大量数据,我使用服务器端分页来获取用户滚动操作的数据。
无论我使用的批量大小,当记录数达到1000时,请求总是失败。
原因是我在返回的数据上创建了复选框,以选择单个记录以便执行进一步操作并使用ajax请求发布表单数据
我还在服务器端使用parse_str来处理分页请求,因此请求失败主要是由于&#34; max_input_vars&#34;默认为1000
解决方法是在php.ini文件中更改此设置,它应该可以正常工作,但并非所有托管服务提供商都允许更改此设置,或者至少我不知道是否这样做。
我还有另外一项工作,每批最多1000条记录或处理。
希望它能节省一些其他的一天