jQuery ajax调用在200次成功调用时触发错误事件

时间:2017-06-08 09:18:15

标签: jquery asp.net ajax

我有一个ASP.NET Core WebAPI项目,在我的控制器中有以下GET:

[HttpGet]
public IEnumerable<string> Get()
{
    return new string[] { "value1", "value2" };
}

我正试图从jQuery ajax调用中调用此方法:

$.ajax({
    type: "GET",
    url: url,
    async: true,
    dataType: "json",
    success: function (data) {
        setJsonResult(data);
        showResultPane("API request result");
    },
    error: function (obj, textStatus, errorThrown) {
        setHtmlResult("Error returned by API: " + errorThrown);
        showResultPane("Unauthorized request result");
    },
    beforeSend: function (request) {
        if (currentToken) {
            request.setRequestHeader("Authorization", "Bearer " + currentToken);
        }
    }
});

我使用Fiddler监控网络流量,我看到服务器返回200 Ok响应,其中包含以下内容:

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8
Server: Kestrel
Access-Control-Allow-Origin: *
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type,     Accept, Authorization
Date: Thu, 08 Jun 2017 09:13:18 GMT

13
["value1","value2"]
0

问题在于,虽然来自Web服务器的响应成功,但仍然会触发jQuery ajax错误方法而不是成功方法。我尝试使用dataType参数(更改它,删除它) - 没有效果。

我甚至尝试从只返回字符串的API中返回不同的值,甚至将dataType更改为text - 仍然会触发错误。

这里发生了什么?

3 个答案:

答案 0 :(得分:0)

这是因为您已将返回数据类型指定为json,并且API未返回有效的json。尝试将方法的返回类型更改为JsonResult,并从方法返回有效的jsonstring。您还可以在此站点中检查响应json是否有效:https://jsonlint.com/

答案 1 :(得分:0)

对我来说,响应看起来不像是有效的JSON。将Get() - 方法的返回值更改为string并尝试使用JavaScriptSerializer()序列化响应。在返回之前序列化()。

同时尝试将dataType设置为&#39; application / json&#39;并在ajax-call中添加 crossDomain:true

我只有使用自托管wcf应用程序的经验,但我使用[WebGet(ResponseFormat = WebMessageFormat.Json)属性作为我的REST方法。

答案 2 :(得分:0)

找到解决方案 - 还不了解它的全部范围。基本上它与ASP.NET CORS策略有关。所以现在我只启用了所有内容:

app.UseCors(builder => builder.AllowAnyOrigin().AllowCredentials().AllowAnyHeader().AllowAnyMethod());