Что не так с этим вызовом Ajax? - PullRequest
0 голосов
/ 25 июня 2019
I'm trying to generate the qr code and pop up it in mvc. Below is the code



    $("#generateQRCode").on('click', function (e) {

    //TODO prevent deafualt
    var Details =
    {
        cityId: $('#city_Id').val(),
        cityTypeId: $('#Type_Id').val(),
        busId: $('bus_Id').val(),
        serialId: $('#serial_Id').val(),
        makeId: $('#make_Id').val()

    }

        $.ajax({
        traditional: true,
        async: true,
        type: 'GET',

       // headers: { 'X-CSRF-TOKEN': $("input[name='__RequestVerificationToken']").val() },
        url: "/Home/Index/",
        dataType: 'json',
        contentType: 'application/json',
        data: JSON.stringify(Details),
        //processData: false,
        //cache: false,
        success: function (data) {

            if (data.result === true)
            {
                debugger;
                $("#afterActionConfirmationModal").modal('show');

            }
            else {
                debugger;
                alert("error1");
            }
        },
        error:
            alert("error2"),
    });
    //controller


[HttpGet]
public IActionResult Index(object details)
{
}

Я всегда получаю блок кода ошибки error2 при отладке, а затем он переходит к методу действия, а значения "details" объекта заполняются значением 0. Нет ошибки сообщение показывается. Пожалуйста, помогите мне

1 Ответ

4 голосов
/ 25 июня 2019

Я всегда получаю предупреждение error2

Потому что это не делает то, что вы думаете:

error: alert("error2")

Это не устанавливаетalert() как обработчик обратного вызова error.Это немедленно выполняет alert() и устанавливает результат (то есть undefined) в качестве обработчика обратного вызова error.Таким образом, alert() будет показано независимо от того, есть ли ошибка или нет, потому что она будет показана еще до того, как будет выполнен вызов AJAX.

Оберните его в функцию для использования в качестве обратного вызова, как и success обработчик обратного вызова:

error: function () {
    alert("error2");
}

Обновление: Из комментариев ниже кажется, что вы также ожидаете многого от типа object в C #.Этот тип не имеет полезных свойств, поэтому некуда найти значения, которые вы публикуете на сервере.Используйте пользовательский тип:

public class Details
{
    public int cityId { get; set; }
    public int cityTypeId { get; set; }
    public int busId { get; set; }
    public int serialId { get; set; }
    public int makeId { get; set; }
}

И используйте этот класс:

public IActionResult Index(Details details)

Вам также может потребоваться заменить JSON.stringify(Details) просто Details, поскольку вы, вероятно, хотите отправитьсам объект, а не сериализованная строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...