功能是用前台的jq发送请求到后台,后台返回数据,然后用js在页面上显示。。。
现在的问题是,我取不到返回的数据!(或许是数据没返回!?)
很苦恼,请大家帮帮忙。。。
代码如下:
js:
$(document).ready(function() {
$.getJSON(
"Handler.ashx",
function(strval) {
var len = strval.length;
var obj = document.getElementById("pp");
var chdobj = document.createElement("table");
obj.insertBefore(chdobj, null);
var i;
for (i = 0; i < len; i++) {
var trobj = document.createElement("tr");
chdobj.insertBefore(trobj, null);
var tdobj = document.createElement("td");
trobj.insertBefore(tdobj, null);
text1 = document.createTextNode(strval.CategoryID[i]);
text2 = document.createTextNode(strval.ProductName[i]);
tdobj.insertBefore(text1);
tdobj.insertBefore(text1);
}
}
);
}
)
cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Collections;
using Newtonsoft.Json;
public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
string constr = @"Data Source=admin-7641acc2c\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa;Password=;Pooling=true";
SqlConnection sqlcon = new SqlConnection(constr);
sqlcon.Open();
string strsql = "select CategoryID, ProductName from products";
SqlCommand sqlcom = new SqlCommand(strsql, sqlcon);
SqlDataAdapter adapter = new SqlDataAdapter(sqlcom);
DataSet dt = new DataSet();
adapter.Fill(dt);
context.Response.Buffer = true;
context.Response.ContentType = "text/plain";
context.Response.Write(dt);
context.Response.End();
}
public bool IsReusable {
get {
return false;
}
}
}
跟踪调试一下。
你的代码有问题。context.Response.Write(dt);? 你吧datatabel直接输出不是对的。应该输出json格式的字符串。至于生成的方式,可以自己写,也可以用网上一些生成json的类库。
下面这个是一个类似的例子。.ashx文件返回 json格式数据。页面jquery绑定。
$.get("DropDownlistHandler.ashx",{Value:val},function (jsonstr) {
var json=eval(jsonstr)
//清空列表
$('#TabContainer1_TabPanel1_ddlGS').html("")
$.each(json, function(i) {
$('#TabContainer1_TabPanel1_ddlGS').append("<option value='" + json[i].TaxNum + "'>"
+ json[i].Rev + "</option>" );
});
将DataTable转为JSON串。context.Response.Write(DataTableToJson(dt,true).ToString());
你客户端写的应该也有问题,用VS2008可以调试JS,看JSON串是否正确返回。如果正确返回你在用JS操作JSON来填充你的Table。
/// <summary>
/// 将数据表转换成JSON类型串
/// </summary>
/// <param name="dt">要转换的数据表</param>
/// <param name="dispose">数据表转换结束后是否dispose掉</param>
/// <returns></returns>
public static StringBuilder DataTableToJson(System.Data.DataTable dt, bool dt_dispose)
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append("[\r\n");
//数据表字段名和类型数组
string[] dt_field = new string[dt.Columns.Count];
int i = 0;
string formatStr = "{{";
string fieldtype = "";
foreach (System.Data.DataColumn dc in dt.Columns)
{
dt_field[i] = dc.Caption.ToLower().Trim();
formatStr += "'" + dc.Caption.ToLower().Trim() + "':";
fieldtype = dc.DataType.ToString().Trim().ToLower();
if (fieldtype.IndexOf("int") > 0 || fieldtype.IndexOf("deci") > 0 ||
fieldtype.IndexOf("floa") > 0 || fieldtype.IndexOf("doub") > 0 ||
fieldtype.IndexOf("bool") > 0)
{
formatStr += "{" + i + "}";
}
else
{
formatStr += "'{" + i + "}'";
}
formatStr += ",";
i++;
}
if (formatStr.EndsWith(","))
{
formatStr = formatStr.Substring(0, formatStr.Length - 1);//去掉尾部","号
}
formatStr += "}},";
i = 0;
object[] objectArray = new object[dt_field.Length];
foreach (System.Data.DataRow dr in dt.Rows)
{
foreach (string fieldname in dt_field)
{ //对 \ , ' 符号进行转换
objectArray[i] = dr[dt_field[i]].ToString().Trim().Replace("\\", "\\\\").Replace("'", "\\'");
switch (objectArray[i].ToString())
{
case "True":
{
objectArray[i] = "true"; break;
}
case "False":
{
objectArray[i] = "false"; break;
}
default: break;
}
i++;
}
i = 0;
stringBuilder.Append(string.Format(formatStr, objectArray));
}
if (stringBuilder.ToString().EndsWith(","))
{
stringBuilder.Remove(stringBuilder.Length - 1, 1);//去掉尾部","号
}
if (dt_dispose)
{
dt.Dispose();
}
return stringBuilder.Append("\r\n];");
}
在后台代码设置断点,看看js是否调用到了后台代码。
注意form表单的方法要是post。