Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未捕获的语法错误:意外标记<;在JSON中使用ASP.Net WebMethod_C#_Jquery_Asp.net_Json_Jquery Bootgrid - Fatal编程技术网

C# 未捕获的语法错误:意外标记<;在JSON中使用ASP.Net WebMethod

C# 未捕获的语法错误:意外标记<;在JSON中使用ASP.Net WebMethod,c#,jquery,asp.net,json,jquery-bootgrid,C#,Jquery,Asp.net,Json,Jquery Bootgrid,我在ASP.NETWebForms应用程序中实现jQuery引导网格时遇到问题 我的页面加载出现以下问题,导致bootgrid无法加载数据: 未捕获的语法错误:JSON中位置4处的意外标记

我在ASP.NETWebForms应用程序中实现jQuery引导网格时遇到问题

我的页面加载出现以下问题,导致bootgrid无法加载数据:

未捕获的语法错误:JSON中位置4处的意外标记<

在Function.parse[as parseJSON]()

在Object.success(jquery.bootgrid.js:232)

着火时(jquery-3.1.1.js:3305)

在Object.fireWith[as resolveWith](jquery-3.1.1.js:3435)

完成时(jquery-3.1.1.js:9242)

在XMLHttpRequest

这是我在JavaScript中的bootgrid实现:

$("#grid").bootgrid({
    ajax: true,
    url: "/Secure/Maintenance/Roles.aspx/GetData",
    rowCount: [10, 50, 75, 100, 200, -1]
})
然后这是我的C#
WebMethod

[WebMethod]
public static string GetData()
{
    var results = (from x in EFDB.AspNetRoles
                   select x).AsQueryable();

    return JsonConvert.SerializeObject(results);
}
我使用LINQ查询获取数据,并尝试将其转换为JSON,但我不确定是否正确。当我在
GetData
方法中设置断点时,它们都无法到达。所以我真的很难调试这个

关于我可能做错什么有什么建议吗

谢谢

Remove.AsQueryable(),因为您正在发送此结果以进行序列化

[WebMethod]
protected static string GetData()
{
    var results = (from x in EFDB.AspNetRoles
                   select new 
                   {
                     Id= x.Id,
                     Name = x.Name
                   });

    return JsonConvert.SerializeObject(results.ToArray());
}

我最终创建了一个
通用处理程序
来发布数据,效果很好。以下是
通用处理程序的完整代码

public class RolesHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/json";
        context.Response.Write(GetData());
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

    public string GetData()
    {
        var result = string.Empty;
        var con = new SqlConnection();
        var cmd = new SqlCommand();
        var dt = new DataTable();
        string sSQL = @"SELECT Id, Name
                        FROM dbo.AspNetRoles;";

        try
        {
            using (var connection = THF.Models.SQLConnectionManager.GetConnection())
            {
                using (var command = new SqlCommand(sSQL, connection))
                {
                    connection.Open();
                    command.CommandTimeout = 0;
                    var da = new SqlDataAdapter(command);
                    da.Fill(dt);
                }
            }

            var sNumRows = dt.Rows.Count.ToString();
            var sDT = JsonConvert.SerializeObject(dt);
            result = "{ \"current\": 1, \"rowCount\": 10, \"rows\": " + sDT + ", \"total\": " + sNumRows + " }";
        }
        catch (Exception ex)
        {
        }
        finally
        {
            cmd.Dispose();
            THF.Models.SQLConnectionManager.CloseConn(con);
        }

        return result;
    }

我的问题是:我使用CompleteRequest而不是Response.End(为了避免线程中止异常):

所以我用下面的代码替换了我的代码,令人惊讶的是,它居然成功了

    try
    {
        Response.Clear();
        Response.Write(Converter.ToJson(resObj));
        Response.End();
    }
    catch (System.Threading.ThreadAbortException tae)
    {
        // ignore
    }

该错误意味着响应是HTML或XML,而不是JSON。在这种情况下,很可能是404或500错误页面。在控制台中检查请求的responseText以查看错误的确切原因is@RoryMcCrossan我已将信息添加到错误中。这有帮助吗?@Rorymcrossan这是否意味着问题肯定存在于我的
WebMethod
?不完全是这样-这就是JS错误。我们需要查看服务器上的responseText。打开控制台并转到“网络”选项卡。然后提出AJAX请求。它应该以红色显示在列表中。如果单击它,您可以使用右侧的选项卡检查它的响应value@RoryMcCrossan没有任何列表项显示为红色:/n这根本无法解决问题。这个方法甚至没有被执行。是的,正如@greenhoorn所提到的。我的问题是,该方法没有得到执行。您已经在页面上编写了用于初始化网格的脚本,如果该方法在您的站点上可用,它应该调用该方法end@HemantDhake你的答案没有什么区别,我仍然有同样的问题。对于你们,我已经创建了小提琴来检查url是否命中,在运行时检查网络调用,您将了解它是否已执行。
    try
    {
        Response.Clear();
        Response.Write(Converter.ToJson(resObj));
        Response.End();
    }
    catch (System.Threading.ThreadAbortException tae)
    {
        // ignore
    }