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);
}
}
我试图在我的 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);
}
}