为什么$ .ajax总是会发生错误回调?

时间:2019-10-03 17:20:53

标签: jquery asp.net-core-webapi

我正在使用jQuery 3.4.1版。服务器端API不会引发任何错误,但是jQuery回调总是会出错。我的POST请求应该更改什么?谢谢!

$.ajax({
    url: 'http://localhost:58373/FileAddAPI/GetFileToken',
    type: 'POST',
    dataType: 'text',
    cache: false,
    crossDomain: true,
    xhrFields: { withCredentials: true },
    data: $('#sToken').val(),
    success: function (data, textStatus, jqXHR) {
        alert(data);
        $("#log").append("Success</br>");
    },
    error: function (xhr, textStatus, errorThrown) {
        $("#log").append("Error " + xhr.responseText + "</br>");
    }
});

[HttpPost]
[AllowAnonymous]
public IActionResult GetFileToken()
{
    string token = "testtoken";

    return Ok(token);
}

我在提琴手下面看到。

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: text/plain; charset=utf-8
Server: Kestrel
X-SourceFiles: =?UTF-8?B?QzpcZGV2XFNob3dDYXNlXEFwdGl0dWRlIEhvc3RlZFxTb2Z0d2FyZSBGYWN0b3J5XEZpbGVVcGxvYWRcRmlsZVVwbG9hZFxGaWxlVXBsb2FkQVBJXFN0YXJ0U2Vzc2lvbg==?=
X-Powered-By: ASP.NET
Date: Thu, 03 Oct 2019 17:53:15 GMT

410
testtoken
0

3 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,并添加了ajax选项contentType解决了该问题。 您可以指定ajax期望的返回类型。

$.ajax({
    url: "url",
    type: "POST",
    contentType: "application/json", <---- this option
    dataType: "text" <---- expected response type
    ...

答案 1 :(得分:1)

contentType:==>是您要发送的数据类型,因此为application / json;        charset = utf-8是一种常见的格式,就像application / x-www-form-urlencoded一样;           charset = UTF-8,这是默认值。

dataType:

是您期望从服务器返回的内容:json,html,文本等。jQuery将使用它来确定如何填充成功函数的参数。

答案 2 :(得分:1)

  

jQuery是回调函数,总是会出错。

跨域请求和dataType:“ jsonp”请求不支持同步操作。

有两种简单的解决方法:

1。您可以如下添加async: false

$.ajax({
        url: 'http://localhost:58373/FileAddAPI/GetFileToken',
        type: 'POST', 
        dataType: "text",
        async: false,
        cache: false,
        crossDomain: true,
        xhrFields: { withCredentials: true },
        data: $('#sToken').val(),
        ...
    });

2。或者,如果您不发送跨域请求,则可以添加正确的content-type并评论crossDomain,如下所示:

$.ajax({
        url: 'http://localhost:58373/FileAddAPI/GetFileToken',
        type: 'POST',
        contentType: 'application/x-www-form-urlencoded', 
        dataType: "text",
        cache: false,
        //crossDomain: true,
        xhrFields: { withCredentials: true },
        data: $('#sToken').val(),
        ...
    });

参考:https://api.jquery.com/jquery.ajax/