首页 新闻 搜索 专区 学院

急急急急!新手求助!很困扰我的问题!关于json+asp.net的一个小demo!

0
悬赏园豆:40 [已关闭问题]

功能是用前台的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;
        }
    }

}

九歌的主页 九歌 | 初学一级 | 园豆:165
提问于:2010-05-06 14:21
< >
分享
其他回答(2)
0

跟踪调试一下。

你的代码有问题。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>" );
});

 

邢少 | 园豆:10926 (专家六级) | 2010-05-06 15:08
0

将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];");
        }

Astar | 园豆:40805 (高人七级) | 2010-05-06 16:07
0

在后台代码设置断点,看看js是否调用到了后台代码。

注意form表单的方法要是post。

天堂口 | 园豆:514 (小虾三级) | 2010-05-07 09:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册