Javascript 是否有一种ASP.NET样板文件方式来获取JSON数据?

Javascript 是否有一种ASP.NET样板文件方式来获取JSON数据?,javascript,jquery,json,ajax,aspnetboilerplate,Javascript,Jquery,Json,Ajax,Aspnetboilerplate,我目前正在尝试,但我一直看到可怕的错误: JSON中位置1处的意外标记o 我正在努力寻找解决方案,想知道是否有人对如何解决这个问题有任何建议 正在序列化为JSON的类: Ajax调用: 控制器: 如果返回类型是JsonResult,则ASP.NET样板文件默认包装ASP.NET MVC操作结果。因此,如果要获得结果,可以禁用包装。尝试将[DontWrapResult]属性添加到GetLocationsAsync方法 PS:您不需要添加此属性。您可以从结果字段中获得它。通过浏览器的开发人员控制台检

我目前正在尝试,但我一直看到可怕的错误:

JSON中位置1处的意外标记o

我正在努力寻找解决方案,想知道是否有人对如何解决这个问题有任何建议

正在序列化为JSON的类:

Ajax调用:

控制器:


如果返回类型是JsonResult,则ASP.NET样板文件默认包装ASP.NET MVC操作结果。因此,如果要获得结果,可以禁用包装。尝试将[DontWrapResult]属性添加到GetLocationsAsync方法


PS:您不需要添加此属性。您可以从结果字段中获得它。通过浏览器的开发人员控制台检查响应,查看其包装方式。

ASP.NET样板文件默认包装ASP.NET MVC操作结果(如果返回类型为JsonResult)。因此,如果要获得结果,可以禁用包装。尝试将[DontWrapResult]属性添加到GetLocationsAsync方法


PS:您不需要添加此属性。您可以从结果字段中获得它。通过浏览器的开发控制台检查响应,看看它是如何包装的。

巧合的是,有一个叫做的部分正好解决了这个问题

请注意,只有第2点特定于ABP:

GetLocationsAsync返回一个JSON对象而不是字符串,因此不应调用

您可以使用以下命令再现错误消息:jQuery.parseJSON{}

ABP包装JsonResult。从以下文件:

此返回格式由abp.ajax函数识别和处理

您可以使用[DontWrapResult]属性,但也可以在这里利用ABP。如果抛出用户友好异常,则返回abp.ajax

因为ajax是异步的,所以getLocationData不能直接返回位置

您可以返回一个链接。如果你对承诺不熟悉,请先阅读

有一种比每人$和推送更整洁的方法

你可以用

最后:

函数getLocationData{ 返回abp.ajax{ url:abp.appPath+Home/GetLocationsAsync, 键入:“获取” }.Then函数结果{ 返回result.mapfunction元素{ 返回[element.lat,element.long]; }; }; } 用法:

getLocationData.Then函数位置{ 控制台位置; };
巧合的是,有一个叫做的部分正好解决了这个问题

请注意,只有第2点特定于ABP:

GetLocationsAsync返回一个JSON对象而不是字符串,因此不应调用

您可以使用以下命令再现错误消息:jQuery.parseJSON{}

ABP包装JsonResult。从以下文件:

此返回格式由abp.ajax函数识别和处理

您可以使用[DontWrapResult]属性,但也可以在这里利用ABP。如果抛出用户友好异常,则返回abp.ajax

因为ajax是异步的,所以getLocationData不能直接返回位置

您可以返回一个链接。如果你对承诺不熟悉,请先阅读

有一种比每人$和推送更整洁的方法

你可以用

最后:

函数getLocationData{ 返回abp.ajax{ url:abp.appPath+Home/GetLocationsAsync, 键入:“获取” }.Then函数结果{ 返回result.mapfunction元素{ 返回[element.lat,element.long]; }; }; } 用法:

getLocationData.Then函数位置{ 控制台位置; };
啊,又来营救了!谢谢@aaronI我想这就是abp.ajx的定义:@user703163 Yes.awsome-abp再次拯救!谢谢@aaronI我想这就是abp.ajx的定义:@user703163是的。
[Serializable]
public class GeoCoordinate
{
    public GeoCoordinate()
    {
    }

    [JsonProperty(PropertyName = "lat")]
    public double Latitude { get; }

    [JsonProperty(PropertyName = "long")]
    public double Longitude { get; }

    public GeoCoordinate(double latitude, double longitude)
    {
        Latitude = latitude;
        Longitude = longitude;
    }

    public override string ToString()
    {
        return string.Format("{0},{1}", Latitude, Longitude);
    }
}
function getLocationData() {
    jQuery.ajax({
        url: abp.appPath + "Home/GetLocationsAsync",
        type: "GET",
        dataType: "json",
        async: true,
        success: function (data) {
            var myArray = jQuery.parseJSON(data);
            locations = [];
            $.each(myArray, function (index, element) {
                locations.push([element.lat, element.long]);
            });
        }
    });
}
[HttpGet]
public async Task<JsonResult> GetLocationsAsync()
{
    var cords = await _practiceAppService.GetAllGeoCoordinates();
    return Json(cords);
}
public async Task<IList<GeoCoordinate>> GetAllGeoCoordinates()
{
    var geoCoordinates = await Repository.GetAll()
        .Where(x => !x.Disabled && !x.Latitude.Equals(0) && !x.Longitude.Equals(0))
        .Select(x => new GeoCoordinate(x.Latitude, x.Longitude))
        .ToListAsync();

    return geoCoordinates;
}
console.log(data);
var myArray = jQuery.parseJSON(data);
[DontWrapResult]
[HttpGet]
public async Task<JsonResult> GetLocationsAsync()
{
    var cords = await _practiceAppService.GetAllGeoCoordinates();
    return Json(cords);
}