Отправить AJAX возврат ошибки, когда данные строки - PullRequest
0 голосов
/ 08 октября 2019

У меня есть простой код, который отправляет данные в действие и возвращает те же данные в AJAX. Вот мой код jQuery:

  $('.calculateField').on('input', function (e) {

    var requestData = $('.calculateField').val();

    $.ajax({
        url: '/InsurancePolicyContract/CalculatePurePrice',
        type: 'POST',
        data: JSON.stringify(requestData),
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        success: function (response) {
            $('#test1').text(response);
        },
        error: function (response) {
            alert(response.responseText);
        },
        failure: function (response) {
            alert(response.responseText);
        }
    });
});

, а вот мой внутренний код:

    [HttpPost]
    public IActionResult CalculatePurePrice([FromBody]string TotalPrice)
    {
        return Ok(TotalPrice);
    }

проблема заключается в том, что я изменяю свои данные отправки (requestData) на строку (например: *)1007 *) он говорит "ошибка разбора" и запускает функцию ошибки в теле AJAX! но когда это было целое число (например: 548), оно работает, чтобы найти, и метод успеха запускается! Почему?

Ответы [ 3 ]

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

Вам нужно добавить заголовок Accept в ваш запрос ajax. Тогда ваш бэкэнд даст правильный json или вернет простой текст.

$ ('. CalculateField'). On ('input', function (e) {

var requestData = $('.calculateField').val();

$.ajax({
    url: '/InsurancePolicyContract/CalculatePurePrice',
    type: 'POST',
    data: JSON.stringify(requestData),
    headers: {
      "Accept": "application/json"
    },
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    success: function (response) {
        $('#test1').text(response);
    },
    error: function (response) {
        alert(response.responseText);
    },
    failure: function (response) {
        alert(response.responseText);
    }
});

});

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

Вы можете изменить свой метод действия, например

[HttpPost]
public ActionResult CalculatePurePrice([FromBody]string TotalPrice)
{
    return Json(TotalPrice, JsonRequestBehavior.AllowGet);
}
0 голосов
/ 16 октября 2019

Для вашей проблемы это вызвано dataType: 'json', который сообщает jQuery, какой ответ ожидать. Для простого теста без "" он не сможет конвертироваться в json. Если вы введете "test" в поле ввода, оно будет работать, но если вы введете test напрямую, оно не будет выполнено, так как нет никаких дополнительных "".

Для обходного пути вы можете удалить dataType: 'json' как

    $.ajax({
            url: '/api/movie/CalculatePurePrice',
            type: 'POST',
            data: JSON.stringify(requestData),
            //dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            success: function (response) {
                    $('#test1').text(response);
            },
            error: function (response) {
                    alert(response.responseText);
            },
            failure: function (response) {
                    alert(response.responseText);
            }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...