Почему $ .ajax всегда вызывает ошибку? - PullRequest
0 голосов
/ 03 октября 2019

Я использую 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 ]

1 голос
/ 03 октября 2019

contentType: ==> - тип данных, которые вы отправляете, поэтому application / json;charset = utf-8 является распространенным, как application / x-www-form-urlencoded;charset = UTF-8, по умолчанию.

dataType:

- это то, что вы ожидаете от сервера: json, html, текст и т. Д. JQuery будет использовать это, чтобы выяснить, как заполнить параметр функции успеха.

1 голос
/ 04 октября 2019

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/

1 голос
/ 03 октября 2019

У меня была похожая проблема, и добавление опции ajax contentType решило проблему. И вы можете указать тип возврата, который ожидает AJAX.

$.ajax({
    url: "url",
    type: "POST",
    contentType: "application/json", <---- this option
    dataType: "text" <---- expected response type
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...