C# 未捕获的语法错误:意外标记<;在JSON中使用ASP.Net WebMethod
我在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实现: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处的意外标记
$("#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
}