如何解决错误:Asp.Net 请求中出现意外的令牌“<”?
Posted
技术标签:
【中文标题】如何解决错误:Asp.Net 请求中出现意外的令牌“<”?【英文标题】:How to resolve Error: Unexpected token '<' in Asp.Net request? 【发布时间】:2020-04-05 02:22:18 【问题描述】:我试图在我的 ASP. Net
应用程序中调用 WebService 并收到以下错误:Error: Unexpected token '<'
。到目前为止,这似乎是一个json
解析问题,但我不确定如何解决它。在我的应用程序中,我有一个数据管理器,它从本地 SQL .mdf
数据库调用存储过程。本质上,它是一个名为 GetEventsByState() 的公共 DataTable
,它存储在我的 DataAcessManager.cs
文件中。它是从我的 App_Service.asmx.cs 文件中的 WebService 调用的。目标是在WebService
中将datatable
作为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
请求时,它会直接出现错误。关于我在这里做错的任何线索或建议。
【问题讨论】:
收到该错误时检查响应。根据我的经验,这通常表明您期待的是 JSON 响应,但却得到了 html 响应(例如服务器错误)。 错误响应并没有给我更多的error = SyntaxError: Unexpected token '<'
,但它似乎确实拖入了HTML <string>
标记,这就是引发错误的原因。关于如何解决这个问题的想法?我的request
中的app.js
中是否有不正确的设置(jsonp?)?
但是来自服务器的响应是什么?
嘿@Matt U,我想通了。请看下面我的回答。您对 HTML 响应的看法是正确的。
【参考方案1】:
这似乎是在调用 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);
【讨论】:
以上是关于如何解决错误:Asp.Net 请求中出现意外的令牌“<”?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 angularjs $http 修复我的 jsonp 回调以解决“意外令牌”错误?
SyntaxError:在 asp.net 中的 ajax 调用中位置 4 的 JSON 中的意外令牌 <