从Ajax响应(Json)错误构建表行:'无效字符'

时间:2015-09-02 10:37:37

标签: c# jquery ajax json

我从c#背后的代码中成功获得了jSon的响应。在jQuery中将jSon转换为表时,它会抛出错误('无效字符')。这是我的代码:

$('#reports').click(function () {
        var pageUrl = '<%= ResolveUrl("~/Admin.aspx/SystemstatusReport")%>';
        $.ajax({
            type: 'POST',
            url: pageUrl,
            contentType: 'application/json; charset=utf-8',
            success: function (data) {
                var response = $.parseJSON(data);

                $(function () {
                    $.each(response, function (i, item) {
                        var $tr = $('<tr>').append(
                            $('<td>').text(item.SystemID),
                            $('<td>').text(item.SystemIP),
                            $('<td>').text(item.SystemStatus)
                        ); 
                        console.log($tr.wrap('<p>').html());
                    });
                });
            },
            error: function (data, success, error) {
                alert("Error:" + error);
            }
        });
    });

我的 c#[WebMethod]

public static string SystemstatusReport()
{
    using (OleDbConnection con=new OleDbConnection( conStr))
    {
        con.Open();
        string query = "SELECT * FROM SystemStatus";
        using (OleDbDataAdapter da=new OleDbDataAdapter( query,con))
        {
            DataSet ds=new DataSet();
            da.Fill(ds);
            DataTable dt = ds.Tables[0];
            var jsonString = DataTableToJson(dt);                
            return jsonString;
        }
    }

}

修改

我的json回复:

[{ "SystemId": 1753259, "IP": "1855652", "SystemStatus": "online" },{ "SystemId": 1753359, "IP": "1585652", "SystemStatus": "online" }]

2 个答案:

答案 0 :(得分:0)

它应该是data.d,如下所示:

 var response = $.parseJSON(data.d);

因为C#=&gt; 3.5将所有JSON响应序列化为变量d。

您需要更改以下代码:

$(function () {
                    $.each(response, function (i, item) {
                        var $tr = $('<tr>').append(
                            $('<td>').text(item.SystemId),
                            $('<td>').text(item.IP), 
                            $('<td>').text(item.SystemStatus)
                        ); 
                        console.log($tr.wrap('<p>').html());
                    });
                });

您需要在Json响应中给出确切的名称。

演示: http://jsfiddle.net/Rj9bR/57/

答案 1 :(得分:0)

我使用JSON.parse方法获取json字符串。以下是我的代码

success: function (data) {
            var sam = JSON.parse(data);

            $(function () {
               var trHTML = '';
    for (var i = 0; i < sam.length; i++) {
        trHTML += '<tr><td>' + sam[i].IP + '</td><td>' + sam[i].SystemID + '</td><td>' + sam[i].Bay + '</td></tr>';
    }$('#records_table').append(trHTML);
                });
            });       

而且我忘了提到JSON对象的索引。