将数据表转换为json格式时,Json值未定义

时间:2010-02-01 10:07:24

标签: asp.net jquery web-services

我想从数据库中检索数据并将其分配给下拉列表。为此,我在onclick事件中使用以下jquery

function getcountry() {
                try {

                    $.ajax({
                    type: "POST",
                        url: "/JsonWebServiceWithJQuery/jsonwebservice.asmx/getcountry",
                        data: "{}",
                        contentType: "application/json;charset=utf-8",
                        success: ajaxCallSucceed,
                        datatype: "json",
                        failure: ajaxCallFailed
                    });
                }
                catch (e) {
                    alert("Failed calling webservice" + e);
                }
            }
            function ajaxCallSucceed(response) {
                alert("Success");
                alert(response.d);
            }
            function ajaxCallFailed(error) {
                alert("I'm failed");
                alert('error: ' + error);
            }



    <input type="button" value="Get All Users" onclick="getcountry();" />

这是我用于从数据库中检索的web方法,也是一个将数据表转换为json格式的转换函数。正在正确地进行检索。但是,输出是未定义的。我无法解决这个问题..有什么帮助吗?

 public static string CreateJsonParameters(DataTable dt)
        {
            StringBuilder JsonString = new StringBuilder();

            //Exception Handling        

            if (dt != null && dt.Rows.Count > 0)
            {
                JsonString.Append("[ ");
                JsonString.Append("{ ");
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    JsonString.Append("{ ");
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        if (j < dt.Columns.Count - 1)
                        {
                            JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\",");
                        }
                        else if (j == dt.Columns.Count - 1)
                        {
                            JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\"");
                        }
                    }

                    /*end Of String*/

                    if (i == dt.Rows.Count - 1)
                    {
                        JsonString.Append("} ");
                    }

                    else
                    {
                        JsonString.Append("}, ");
                    }
                }
                JsonString.Append("}]");
                return JsonString.ToString();
            }
            else
            {
                return null;
            }
        }

     public static string getcountry()
        {
            country c = default(country);
            List<country> cntrylist = new List<country>();
            DataTable dt = new DataTable("table1");
            using (SqlConnection connection = new SqlConnection(connectionstring))
            {

                using (SqlDataAdapter da = new SqlDataAdapter("getcountry", connection))
                {
                    da.SelectCommand.CommandType = CommandType.StoredProcedure;
                    da.Fill(dt);
                    connection.Close();
                    string s = CreateJsonParameters(dt);
                    return s;
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

首先,我建议您使用Ajax Enabled WCF service而不是自己构建Json数据。如果您不想使用WCF,至少使用JSON库。如果你没有合适的库,那么很容易返回格式错误的json数据。

另外,你为什么使用response.d? asp对象由Asp服务返回。如果您没有使用它,为什么要包括它?

最后,使用Firebug或其他方法检查返回的json是否格式正确。如有疑问,请在此处发布。