我有一个页面需要单击表中的数字,然后从数据库中相应地读取另一个表。我曾经使用ASP gridview生成第二个表。然后我试图使用jquery ajax。当我需要请求20,000条记录时,jquery ajax速度非常慢(加载大约需要6秒),而asp gridview要快得多。Ajax请求太慢
ASPX.VB
_
_
Public Shared Function GetOrderDetail(ByVal id As String) As String
Dim orderNum As Integer = Integer.Parse(id)
Dim sbTable As New StringBuilder
Dim sql As New StringBuilder
sql.Append("SELECT oh.[ORDERNO], od.[STYLE], s.[STYLEDESC],od.[COLOR], c.[COLORDESC], od.[SIZE],")
sql.Append(" SUM(CONVERT(DECIMAL(12,0),od.[TOTALQTY])) AS 'Item_Total', och.[TRACKINGNO]")
sql.Append(" FROM [OrderHeader] AS oh INNER JOIN [test1] AS ocd")
sql.Append(" ON oh.[ORDERNO] = ocd.[ORDERNO] INNER JOIN [test2] AS och")
sql.Append(" ON ocd.[FKEY] = och.[PKEY] INNER JOIN [test3] AS od")
sql.Append(" ON oh.[ORDERNO] = od.[ORDERNO] INNER JOIN [test4] as s")
sql.Append(" ON s.[STYLE] = od.[STYLE] INNER JOIN [test5] AS c")
sql.Append(" ON c.[COLOR] = od.[COLOR]")
sql.Append(" WHERE od.[ORDERNO] =")
sql.Append(orderNum)
sql.Append(" GROUP BY oh.[ORDERNO], od.[STYLE], s.[STYLEDESC],od.[COLOR], c.[COLORDESC], od.[SIZE], och.[TRACKINGNO]")
sql.Append("select [ORDERNO] from [oabcd].[dbo].[OrderHeader] where [ORDERNO] =")
sql.Append(orderNum)
Dim connMain As Data.SqlClient.SqlConnection
Dim cmdMain As Data.SqlClient.SqlCommand
Dim rdrMain As Data.SqlClient.SqlDataReader
connMain = New Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("SsssConnectionString").ConnectionString)
connMain.Open()
cmdMain = New Data.SqlClient.SqlCommand(sql.ToString(), connMain)
rdrMain = cmdMain.ExecuteReader()
Dim bAlt As Boolean = True
If rdrMain.HasRows Then
sbTable.Append("
sbTable.Append("")
sbTable.Append("
")sbTable.Append("
")sbTable.Append("Order Number")
sbTable.Append("
")sbTable.Append("
")sbTable.Append("Item")
sbTable.Append("
")sbTable.Append("
")sbTable.Append("Color")
sbTable.Append("
")sbTable.Append("
")sbTable.Append("Size")
sbTable.Append("
")sbTable.Append("
")sbTable.Append("Item Total")
sbTable.Append("
")sbTable.Append("
")sbTable.Append("Tracking Number")
sbTable.Append("
")sbTable.Append("
")sbTable.Append("
")sbTable.Append("
")While rdrMain.Read()
sbTable.Append("
")sbTable.Append("
")sbTable.Append(rdrMain.Item("ORDERNO"))
sbTable.Append("
")sbTable.Append("
")sbTable.Append(rdrMain.Item("STYLEDESC"))
sbTable.Append("
")sbTable.Append("
")sbTable.Append(rdrMain.Item("COLORDESC"))
sbTable.Append("
")sbTable.Append("
")sbTable.Append(rdrMain.Item("Size"))
sbTable.Append("
")sbTable.Append("
")sbTable.Append(rdrMain.Item("Item_Total"))
sbTable.Append("
")sbTable.Append("
")sbTable.Append(rdrMain.Item("TRACKINGNO"))
sbTable.Append("
")sbTable.Append("
")End While
sbTable.Append("
")sbTable.Append("
")End If
rdrMain.Close()
cmdMain.Dispose()
connMain.Close()
connMain.Dispose()
Return sbTable.ToString()
End Function
JS
$('.orderNumber').on('click', function() {
var orderNum = $(this).text();
console.log(orderNum);
$.ajax({
type: "POST",
url: "Order.aspx/GetOrderDetail",
data: "{'id' :'" + orderNum + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
$('#orderDetail').html(result.d);
$('.orderDetailTable').dataTable({
});
},
error: function (xhr, status, error) {
// Display a generic error for now.
alert("Ajax Read Detail Error!");
}
});
});
我回(含20,000条记录)一个非常大的字符串。我的问题是:是否有任何方法来改进代码,如返回其他类型?或者不返回任何东西只是从asp GetOrderDetail()函数生成HTML?任何可以使请求更快的东西?谢谢。
2013-08-23
Quentin
+1
与任何优化问题一样,在修复问题之前,您需要知道什么是缓慢的。您可以使用像Chrome的开发人员工具“网络”标签这样的工具来获取有关时间到了哪里的更多详细信息。它将打破查找/连接,等待第一个字节和接收数据之间的时间。这会给你一个线索,以确定需要解决的问题。 –
+0
也许不会立即返回20K记录并实现分页? –
+0
它看起来不像你正在返回json数据。看起来你正在返回表格数据,这将会更大,并且需要更长的时间才能完成。 –