How to resolve Error: Unexpected token '<' in Asp.Net request?

How to resolve Error: Unexpected token '<' in Asp.Net request?

我试图在我的 ASP. Net 应用程序中调用 WebService,但出现以下错误:Error: Unexpected token '<'。到目前为止,这似乎是一个 json 解析问题,但我不确定如何解决它。在我的应用程序中,我有一个从本地 SQL .mdf 数据库调用存储过程的数据管理器。本质上,它是一个名为 GetEventsByState() 的 public DataTable,它存储在我的 DataAcessManager.cs 文件中。它是从我的 App_Service.asmx.cs 文件中的 WebService 调用的。目标是 return datatable 作为 WebService 中的 json 这样我就可以在我的 app.js 文件中调用它:

RII_Service.cs

    [WebMethod]
    public string GetListOfEventsByState()
    {
        _dtMgr = new DataAccessManager();
        //string state = st;
        /*HttpContext.Current.Response.Write(GetEventsData());*/
        DataTable EventsList = _dtMgr.GetEventsByState();
        var lst = EventsList.AsEnumerable()
            .Select(r => r.Table.Columns.Cast<DataColumn>()
                .Select(c => new KeyValuePair<string, object>(c.ColumnName, r[c.Ordinal])
                ).ToDictionary(z => z.Key, z => z.Value)
            ).ToList();
        //now serialize it
        try
        {
            string json = new JavaScriptSerializer().Serialize(lst);
            json = json.TrimEnd();
            return json;
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
    }

然后在 app.js 页面加载时调用此 WebMethod,如下所示:

app.js

//Function to call Asp.Net Web Service and retrieve events list by state
var EventsData = esriRequest({
    url: "RII_Service.asmx/GetListOfEventsByState",
    content: {
    },
    dataType: "jsonp",
    handleAs: "json"
});
EventsData.then(
    function (response) {
        console.log(response);
        events_json = response;
....
}, function (error) {
    console.log("Error: ", error.message);
}); 

当我在 RII_Service.cs 上为 WebMethod GetListOfEventsByState() 设置断点时,它会生成一个可行的 json 字符串,如下所示:

"[{\"FullEventName\":\"NJ Cindy 2005\",\"State\":\"NJ\"},{\"FullEventName\":\"NJ Gordon 2000\",\"State\":\"NJ\"}...]

然而,当它返回到 EventsData 请求时,它直接进入错误。关于我在这里做错了什么的任何线索或建议。

这似乎是在 RII_Service.cs 中调用 WebMethod 时 xml/html 被拉到 app.js 请求的问题。尽管 GetListOfEventsByState() 显示 json string 被返回,但 <string> 标签总是会在 app.js 一侧被拾取(因此解释了 '<' 错误)。为了解决这个问题,我做了两件事。首先,使用NewtonSoft.Json方法对其进行序列化JsonConvert

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

*您可能必须先使用“工具”>“NuGet 包”安装它。然后我使用 System.Web.HttpContext 来格式化输出。因此,我按如下方式修改了我的 WebMethod GetListOfEventsByState() 并且它起作用了。希望这对遇到类似问题的人有所帮助:

    [WebMethod]
    //public string GetListOfEventsByState()
    public void GetListOfEventsByState()
    {
        _dtMgr = new DataAccessManager();
        DataTable EventsList = _dtMgr.GetEventsByState();

        //now serialize it
        try
        {
            string JSONresult;
            JSONresult = JsonConvert.SerializeObject(EventsList);
            HttpContext.Current.Response.Write(JSONresult);
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
    }